-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathFacebook.py
More file actions
48 lines (39 loc) · 1.86 KB
/
Facebook.py
File metadata and controls
48 lines (39 loc) · 1.86 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
import Replication
import scipy.misc
class FacebookScheme(Replication.ReplicationScheme):
def __init__(self, *args, **kwargs):
super(FacebookScheme, self).__init__(*args, **kwargs)
self.chunksPerNode = 10000
self.scatterWidth = 10
class FacebookRandomScheme(FacebookScheme):
def probabilityOfDataLossSimulation(self, numNodes):
return self.simulationFacebookRandomDataLoss(
self.trials, numNodes, self.chunksPerNode, self.replicationFactor,
self.scatterWidth)
def probabilityOfDataLossComputation(self, numNodes):
# compute the probability
numFailedNodes = 0.01 * numNodes
failedCombos = scipy.misc.comb(numFailedNodes, self.replicationFactor)
totalCopysets = scipy.misc.comb(numNodes, self.replicationFactor)
numCopysets = (scipy.misc.comb(self.scatterWidth + 1,
self.replicationFactor - 1)
* numNodes)
probOfDataLoss = 1.0 - (1.0 - numCopysets / totalCopysets) ** failedCombos
return probOfDataLoss
@staticmethod
def plotInfo():
return Replication.PlotInfo('Facebook, Random Replication',
linestyle='-.', marker='o', markersize=10,
color='lime')
class FacebookCopysetScheme(FacebookScheme):
def probabilityOfDataLossSimulation(self, numNodes):
return self.simulationCopysetDataLoss(
self.trials, numNodes, self.chunksPerNode, self.replicationFactor,
self.scatterWidth)
def probabilityOfDataLossComputation(self, numNodes):
return self.copysetReplicationDataLoss(
numNodes, self.chunksPerNode, self.replicationFactor, self.scatterWidth)
@staticmethod
def plotInfo():
return Replication.PlotInfo('Facebook, Copyset Replication',
linestyle='-.', marker='s', color='fuchsia')