Skip to content

Commit 3cf801a

Browse files
committed
Working test cases and operate command
1 parent 7efe9bb commit 3cf801a

19 files changed

+722
-97
lines changed

NewWritePolicy

Whitespace-only changes.

aerospike_suite_test.go

+6-6
Original file line numberDiff line numberDiff line change
@@ -41,14 +41,14 @@ import (
4141
var (
4242
hosts = flag.String("hosts", "", "Comma separated Aerospike server seed hostnames or IP addresses and ports. eg: s1:3000,s2:3000,s3:3000")
4343
host = flag.String("h", "127.0.0.1", "Aerospike server seed hostnames or IP addresses")
44-
port = flag.Int("p", 3000, "Aerospike server seed hostname or IP address port number.")
44+
port = flag.Int("p", 3100, "Aerospike server seed hostname or IP address port number.")
4545
user = flag.String("U", "", "Username.")
4646
password = flag.String("P", "", "Password.")
4747
authMode = flag.String("A", "internal", "Authentication mode: internal | external")
4848
useReplicas = flag.Bool("use-replicas", false, "Aerospike will use replicas as well as master partitions.")
4949
debug = flag.Bool("debug", false, "Will set the logging level to DEBUG.")
5050
namespace = flag.String("n", "test", "Namespace")
51-
UseServicesAlternate = flag.Bool("use-services-alternate", false, "Will set ClientPolicy.UseServicesAlternate to true.")
51+
UseServicesAlternate = flag.Bool("use-services-alternate", true, "Will set ClientPolicy.UseServicesAlternate to true.")
5252

5353
certFile = flag.String("cert_file", "", "Certificate file name.")
5454
keyFile = flag.String("key_file", "", "Key file name.")
@@ -344,8 +344,8 @@ const (
344344
)
345345

346346
func nsupPeriod(ns string) int {
347-
var pattern = `nsup-period=(?P<value>\d+)`
348-
var vmeta = regexp.MustCompile(pattern)
347+
pattern := `nsup-period=(?P<value>\d+)`
348+
vmeta := regexp.MustCompile(pattern)
349349

350350
vs := info(client, "namespace/"+ns)
351351
server := findNamedMatches(vmeta, vs)
@@ -357,8 +357,8 @@ func nsupPeriod(ns string) int {
357357
}
358358

359359
func cmpServerVersion(v string) versionStatus {
360-
var pattern = `(?P<v1>\d+)(\.(?P<v2>\d+)(\.(?P<v3>\d+)(\.(?P<v4>\d+))?)?)?.*`
361-
var vmeta = regexp.MustCompile(pattern)
360+
pattern := `(?P<v1>\d+)(\.(?P<v2>\d+)(\.(?P<v3>\d+)(\.(?P<v4>\d+))?)?)?.*`
361+
vmeta := regexp.MustCompile(pattern)
362362

363363
vs := info(client, "build")
364364

batch_command_operate.go

+4-4
Original file line numberDiff line numberDiff line change
@@ -246,16 +246,16 @@ func (cmd *batchCommandOperate) executeSingle(client *Client) Error {
246246
} else if len(ops) == 0 {
247247
ops = append(ops, GetOp())
248248
}
249-
res, err = client.Operate(cmd.client.getUsableBatchReadPolicy(br.Policy).toWritePolicy(cmd.policy), br.Key, ops...)
249+
res, err = client.Operate(cmd.client.getUsableBatchReadPolicyWithConfig(br.Policy, applyConfigToBatchReadPolicy).toWritePolicyWithConfig(cmd.policy, client.dynConfig), br.Key, ops...)
250250
case *BatchWrite:
251-
policy := cmd.client.getUsableBatchWritePolicy(br.Policy).toWritePolicy(cmd.policy)
251+
policy := cmd.client.getUsableBatchWritePolicyWithConfig(br.Policy, applyConfigToBatchWritePolicy).toWritePolicyWithConfig(cmd.policy, client.dynConfig)
252252
policy.RespondPerEachOp = true
253253
res, err = client.Operate(policy, br.Key, br.Ops...)
254254
case *BatchDelete:
255-
policy := cmd.client.getUsableBatchDeletePolicy(br.Policy).toWritePolicy(cmd.policy)
255+
policy := cmd.client.getUsableBatchDeletePolicyWithConfig(br.Policy, applyConfigToBatchDeletePolicy).toWritePolicyWithConfig(cmd.policy, client.dynConfig)
256256
res, err = client.Operate(policy, br.Key, DeleteOp())
257257
case *BatchUDF:
258-
policy := cmd.client.getUsableBatchUDFPolicy(br.Policy).toWritePolicy(cmd.policy)
258+
policy := cmd.client.getUsableBatchUDFPolicyWithConfig(br.Policy, applyConfigToBatchUDFPolicy).toWritePolicyWithConfig(cmd.policy, client.dynConfig)
259259
policy.RespondPerEachOp = true
260260
res, err = client.execute(policy, br.Key, br.PackageName, br.FunctionName, br.FunctionArgs...)
261261
}

batch_delete_policy.go

+80
Original file line numberDiff line numberDiff line change
@@ -73,3 +73,83 @@ func (bdp *BatchDeletePolicy) toWritePolicy(bp *BatchPolicy) *WritePolicy {
7373
}
7474
return wp
7575
}
76+
77+
func (bdp *BatchDeletePolicy) toWritePolicyWithConfig(bp *BatchPolicy, dynConfig *DynConfig) *WritePolicy {
78+
wp := bp.toWritePolicy()
79+
80+
if bdp != nil {
81+
if bdp.FilterExpression != nil {
82+
wp.FilterExpression = bdp.FilterExpression
83+
}
84+
wp.CommitLevel = bdp.CommitLevel
85+
wp.GenerationPolicy = bdp.GenerationPolicy
86+
wp.Generation = bdp.Generation
87+
wp.DurableDelete = bdp.DurableDelete
88+
wp.SendKey = bdp.SendKey
89+
}
90+
91+
config := dynConfig.config
92+
if config != nil && config.Dynamic.BatchWrite != nil {
93+
if config.Dynamic.BatchWrite.DurableDelete != nil {
94+
wp.DurableDelete = *config.Dynamic.BatchWrite.DurableDelete
95+
}
96+
if config.Dynamic.BatchWrite.SendKey != nil {
97+
wp.SendKey = *config.Dynamic.BatchWrite.SendKey
98+
}
99+
}
100+
101+
return wp
102+
}
103+
104+
// copyQueryPolicy creates a new BasePolicy instance and copies the values from the source BasePolicy.
105+
func copyBatchDeletePolicy(src *BatchDeletePolicy) *BatchDeletePolicy {
106+
if src == nil {
107+
return nil
108+
}
109+
110+
response := NewBatchDeletePolicy()
111+
112+
response.FilterExpression = src.FilterExpression
113+
response.FilterExpression = src.FilterExpression
114+
response.CommitLevel = src.CommitLevel
115+
response.GenerationPolicy = src.GenerationPolicy
116+
response.Generation = src.Generation
117+
response.DurableDelete = src.DurableDelete
118+
response.SendKey = src.SendKey
119+
120+
return response
121+
}
122+
123+
// applyConfigToQueryPolicy applies the dynamic configuration and generates a new policy. This function
124+
// will NOT override any custom settings in the QueryPolicy.
125+
func applyConfigToBatchDeletePolicy(policy *BatchDeletePolicy, dynConfig *DynConfig) *BatchDeletePolicy {
126+
config := dynConfig.config
127+
128+
if config == nil && !dynConfig.configInitialized.Load() {
129+
// On initial load it is possible that the config is not yet loaded. This will kick things off to make sure
130+
// config is loaded.
131+
dynConfig.loadConfig()
132+
config = dynConfig.config
133+
}
134+
135+
if config != nil && config.Dynamic != nil && config.Dynamic.BatchWrite != nil {
136+
var responsePolicy *BatchDeletePolicy
137+
if policy != nil {
138+
// Copy the existing write policy to preserve any custom settings.
139+
responsePolicy = copyBatchDeletePolicy(policy)
140+
} else {
141+
responsePolicy = NewBatchDeletePolicy()
142+
}
143+
144+
if config.Dynamic.BatchWrite.DurableDelete != nil {
145+
responsePolicy.DurableDelete = *config.Dynamic.BatchWrite.DurableDelete
146+
}
147+
if config.Dynamic.BatchWrite.SendKey != nil {
148+
responsePolicy.SendKey = *config.Dynamic.BatchWrite.SendKey
149+
}
150+
151+
return responsePolicy
152+
} else {
153+
return policy
154+
}
155+
}

batch_read_policy.go

+93
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414

1515
package aerospike
1616

17+
import "time"
18+
1719
// BatchReadPolicy attributes used in batch read commands.
1820
type BatchReadPolicy struct {
1921
// FilterExpression is the optional expression filter. If FilterExpression exists and evaluates to false, the specific batch key
@@ -68,3 +70,94 @@ func (brp *BatchReadPolicy) toWritePolicy(bp *BatchPolicy) *WritePolicy {
6870
}
6971
return wp
7072
}
73+
74+
func (brp *BatchReadPolicy) toWritePolicyWithConfig(bp *BatchPolicy, dynConfig *DynConfig) *WritePolicy {
75+
wp := bp.toWritePolicy()
76+
77+
if brp != nil {
78+
if brp.FilterExpression != nil {
79+
wp.FilterExpression = brp.FilterExpression
80+
}
81+
82+
wp.ReadModeAP = brp.ReadModeAP
83+
wp.ReadModeSC = brp.ReadModeSC
84+
wp.ReadTouchTTLPercent = brp.ReadTouchTTLPercent
85+
}
86+
87+
config := dynConfig.config
88+
if config != nil && config.Dynamic.BatchRead != nil {
89+
if config.Dynamic.BatchRead.ReadModeAp != nil {
90+
wp.ReadModeAP = mapReadModeAPToReadModeAP(*config.Dynamic.BatchRead.ReadModeAp)
91+
}
92+
if config.Dynamic.BatchRead.ReadModeSc != nil {
93+
wp.ReadModeSC = mapReadModeSCToReadModeSC(*config.Dynamic.BatchRead.ReadModeSc)
94+
}
95+
if config.Dynamic.BatchRead.Replica != nil {
96+
wp.ReplicaPolicy = mapReplicaToReplicaPolicy(*config.Dynamic.BatchRead.Replica)
97+
}
98+
if config.Dynamic.BatchRead.SleepBetweenRetries != nil {
99+
wp.SleepBetweenRetries = time.Duration(*config.Dynamic.BatchRead.SleepBetweenRetries)
100+
}
101+
if config.Dynamic.BatchRead.SocketTimeout != nil {
102+
wp.SocketTimeout = time.Duration(*config.Dynamic.BatchRead.SocketTimeout)
103+
}
104+
if config.Dynamic.BatchRead.TotalTimeout != nil {
105+
wp.TotalTimeout = time.Duration(*config.Dynamic.BatchRead.TotalTimeout)
106+
}
107+
if config.Dynamic.BatchRead.MaxRetries != nil {
108+
wp.MaxRetries = *config.Dynamic.BatchRead.MaxRetries
109+
}
110+
}
111+
112+
return wp
113+
}
114+
115+
// copyQueryPolicy creates a new BasePolicy instance and copies the values from the source BasePolicy.
116+
func copyBatchReadPolicy(src *BatchReadPolicy) *BatchReadPolicy {
117+
if src == nil {
118+
return nil
119+
}
120+
121+
response := NewBatchReadPolicy()
122+
123+
response.FilterExpression = src.FilterExpression
124+
response.ReadModeAP = src.ReadModeAP
125+
response.ReadModeSC = src.ReadModeSC
126+
response.ReadTouchTTLPercent = src.ReadTouchTTLPercent
127+
128+
return response
129+
}
130+
131+
// applyConfigToQueryPolicy applies the dynamic configuration and generates a new policy. This function
132+
// will NOT override any custom settings in the QueryPolicy.
133+
func applyConfigToBatchReadPolicy(policy *BatchReadPolicy, dynConfig *DynConfig) *BatchReadPolicy {
134+
config := dynConfig.config
135+
136+
if config == nil && !dynConfig.configInitialized.Load() {
137+
// On initial load it is possible that the config is not yet loaded. This will kick things off to make sure
138+
// config is loaded.
139+
dynConfig.loadConfig()
140+
config = dynConfig.config
141+
}
142+
143+
if config != nil && config.Dynamic != nil && config.Dynamic.BatchRead != nil {
144+
var responsePolicy *BatchReadPolicy
145+
if policy != nil {
146+
// Copy the existing write policy to preserve any custom settings.
147+
responsePolicy = copyBatchReadPolicy(policy)
148+
} else {
149+
responsePolicy = NewBatchReadPolicy()
150+
}
151+
152+
if config.Dynamic.BatchRead.ReadModeAp != nil {
153+
responsePolicy.ReadModeAP = mapReadModeAPToReadModeAP(*config.Dynamic.BatchRead.ReadModeAp)
154+
}
155+
if config.Dynamic.BatchRead.ReadModeSc != nil {
156+
responsePolicy.ReadModeSC = mapReadModeSCToReadModeSC(*config.Dynamic.BatchRead.ReadModeSc)
157+
}
158+
159+
return responsePolicy
160+
} else {
161+
return policy
162+
}
163+
}

batch_udf_policy.go

+79
Original file line numberDiff line numberDiff line change
@@ -80,3 +80,82 @@ func (bup *BatchUDFPolicy) toWritePolicy(bp *BatchPolicy) *WritePolicy {
8080
}
8181
return wp
8282
}
83+
84+
func (bup *BatchUDFPolicy) toWritePolicyWithConfig(bp *BatchPolicy, dynConfig *DynConfig) *WritePolicy {
85+
wp := bp.toWritePolicy()
86+
87+
if bup != nil {
88+
if bup.FilterExpression != nil {
89+
wp.FilterExpression = bup.FilterExpression
90+
}
91+
wp.CommitLevel = bup.CommitLevel
92+
wp.Expiration = bup.Expiration
93+
wp.DurableDelete = bup.DurableDelete
94+
wp.SendKey = bup.SendKey
95+
}
96+
97+
config := dynConfig.config
98+
if config != nil && config.Dynamic.BatchUdf != nil {
99+
if config.Dynamic.BatchWrite.DurableDelete != nil {
100+
wp.DurableDelete = *config.Dynamic.BatchWrite.DurableDelete
101+
}
102+
if config.Dynamic.BatchWrite.SendKey != nil {
103+
wp.SendKey = *config.Dynamic.BatchWrite.SendKey
104+
}
105+
}
106+
107+
return wp
108+
}
109+
110+
// copyQueryPolicy creates a new BasePolicy instance and copies the values from the source BasePolicy.
111+
func copyBatchUDFPolicy(src *BatchUDFPolicy) *BatchUDFPolicy {
112+
if src == nil {
113+
return nil
114+
}
115+
116+
response := NewBatchUDFPolicy()
117+
118+
response.FilterExpression = src.FilterExpression
119+
response.FilterExpression = src.FilterExpression
120+
response.CommitLevel = src.CommitLevel
121+
response.Expiration = src.Expiration
122+
response.DurableDelete = src.DurableDelete
123+
response.OnLockingOnly = src.OnLockingOnly
124+
response.SendKey = src.SendKey
125+
126+
return response
127+
}
128+
129+
// applyConfigToQueryPolicy applies the dynamic configuration and generates a new policy. This function
130+
// will NOT override any custom settings in the QueryPolicy.
131+
func applyConfigToBatchUDFPolicy(policy *BatchUDFPolicy, dynConfig *DynConfig) *BatchUDFPolicy {
132+
config := dynConfig.config
133+
134+
if config == nil && !dynConfig.configInitialized.Load() {
135+
// On initial load it is possible that the config is not yet loaded. This will kick things off to make sure
136+
// config is loaded.
137+
dynConfig.loadConfig()
138+
config = dynConfig.config
139+
}
140+
141+
if config != nil && config.Dynamic != nil && config.Dynamic.BatchUdf != nil {
142+
var responsePolicy *BatchUDFPolicy
143+
if policy != nil {
144+
// Copy the existing write policy to preserve any custom settings.
145+
responsePolicy = copyBatchUDFPolicy(policy)
146+
} else {
147+
responsePolicy = NewBatchUDFPolicy()
148+
}
149+
150+
if config.Dynamic.BatchWrite.DurableDelete != nil {
151+
responsePolicy.DurableDelete = *config.Dynamic.BatchUdf.DurableDelete
152+
}
153+
if config.Dynamic.BatchWrite.SendKey != nil {
154+
responsePolicy.SendKey = *config.Dynamic.BatchUdf.SendKey
155+
}
156+
157+
return responsePolicy
158+
} else {
159+
return policy
160+
}
161+
}

0 commit comments

Comments
 (0)