/
AbstractLockManager.java
137 lines (105 loc) · 4.08 KB
/
AbstractLockManager.java
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
package me.prettyprint.cassandra.locking;
import java.util.Arrays;
import me.prettyprint.cassandra.service.AbstractCluster;
import me.prettyprint.cassandra.service.CassandraHostConfigurator;
import me.prettyprint.cassandra.service.ThriftKsDef;
import me.prettyprint.hector.api.Cluster;
import me.prettyprint.hector.api.Keyspace;
import me.prettyprint.hector.api.ddl.ColumnFamilyDefinition;
import me.prettyprint.hector.api.ddl.ComparatorType;
import me.prettyprint.hector.api.ddl.KeyspaceDefinition;
import me.prettyprint.hector.api.factory.HFactory;
import me.prettyprint.hector.api.locking.HLockManager;
import me.prettyprint.hector.api.locking.HLockManagerConfigurator;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public abstract class AbstractLockManager implements HLockManager {
private static final Logger log = LoggerFactory.getLogger(AbstractLockManager.class);
protected Cluster cluster;
protected Keyspace keyspace;
protected HLockManagerConfigurator lockManagerConfigurator;
public AbstractLockManager(Cluster cluster, Keyspace keyspace, HLockManagerConfigurator lockManagerConfigurator) {
if (cluster == null)
throw new RuntimeException("Cluster cannot be null for LockManager");
this.cluster = cluster;
if (lockManagerConfigurator == null) {
this.lockManagerConfigurator = new HLockManagerConfigurator();
}
if (keyspace == null) {
this.keyspace = HFactory.createKeyspace(lockManagerConfigurator.getKeyspaceName(), cluster);
} else {
// Set the Keyspace name in order to keep the info consistent
lockManagerConfigurator.setKeyspaceName(keyspace.getKeyspaceName());
}
}
public AbstractLockManager(Cluster cluster) {
this(cluster, null, null);
}
public AbstractLockManager(Cluster cluster, Keyspace keyspace) {
this(cluster, keyspace, null);
}
@Override
public void init() {
checkCreateLockSchema();
}
private void checkCreateLockSchema() {
KeyspaceDefinition keyspaceDef = cluster.describeKeyspace(keyspace.getKeyspaceName());
if (keyspaceDef == null) {
ColumnFamilyDefinition cfDef = createColumnFamilyDefinition();
KeyspaceDefinition newKeyspace = HFactory.createKeyspaceDefinition(keyspace.getKeyspaceName(),
ThriftKsDef.DEF_STRATEGY_CLASS,
lockManagerConfigurator.getReplicationFactor(),
Arrays.asList(cfDef));
log.info("Creating Keyspace and Column Family for LockManager with name (KSPS/CF): (" + newKeyspace.getName() + " / " + cfDef.getName());
cluster.addKeyspace(newKeyspace, true);
} else {
log.info("Keyspace for LockManager already exists. Skipping creation.");
// The Keyspace exists but we don't know anything about the CF yet.
if (!doesLockCFExist(keyspaceDef)) {
// create it
ColumnFamilyDefinition cfDef = createColumnFamilyDefinition();
log.info("Creating Column Family for LockManager with name: " + cfDef.getName());
cluster.addColumnFamily(cfDef, true);
} else {
log.info("Column Family for LockManager already exists. Skipping creation.");
}
}
}
private ColumnFamilyDefinition createColumnFamilyDefinition() {
return HFactory.createColumnFamilyDefinition(keyspace.getKeyspaceName(),
lockManagerConfigurator.getLockManagerCF(),
ComparatorType.BYTESTYPE);
}
private boolean doesLockCFExist(KeyspaceDefinition keyspaceDef) {
for (ColumnFamilyDefinition cfdef : keyspaceDef.getCfDefs()) {
if (cfdef.getName().equals(lockManagerConfigurator.getLockManagerCF())) {
return true;
}
}
return false;
}
private CassandraHostConfigurator getConfigurator() {
return ((AbstractCluster) cluster).getConfigurator();
}
@Override
public Cluster getCluster() {
return cluster;
}
public void setCluster(Cluster cluster) {
this.cluster = cluster;
}
@Override
public Keyspace getKeyspace() {
return keyspace;
}
public void setKeyspace(Keyspace keyspace) {
this.keyspace = keyspace;
}
@Override
public HLockManagerConfigurator getLockManagerConfigurator() {
return lockManagerConfigurator;
}
public void setLockManagerConfigurator(HLockManagerConfigurator lockManagerConfigurator) {
this.lockManagerConfigurator = lockManagerConfigurator;
}
}