-
Notifications
You must be signed in to change notification settings - Fork 199
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
53 changed files
with
1,979 additions
and
1,454 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,100 @@ | ||
// Copyright 2014-2022 Aerospike, Inc. | ||
// | ||
// Licensed under the Apache License, Version 2.0 (the "License"); | ||
// you may not use this file except in compliance with the License. | ||
// You may obtain a copy of the License at | ||
// | ||
// http://www.apache.org/licenses/LICENSE-2.0 | ||
// | ||
// Unless required by applicable law or agreed to in writing, software | ||
// distributed under the License is distributed on an "AS IS" BASIS, | ||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
// See the License for the specific language governing permissions and | ||
// limitations under the License. | ||
|
||
package aerospike | ||
|
||
import ( | ||
"reflect" | ||
|
||
"github.com/aerospike/aerospike-client-go/v7/types" | ||
) | ||
|
||
type baseReadCommand struct { | ||
singleCommand | ||
|
||
policy *BasePolicy | ||
binNames []string | ||
record *Record | ||
|
||
// pointer to the object that's going to be unmarshalled | ||
object *reflect.Value | ||
|
||
replicaSequence int | ||
} | ||
|
||
// this method uses reflection. | ||
// Will not be set if performance flag is passed for the build. | ||
var objectParser func( | ||
brc *baseReadCommand, | ||
opCount int, | ||
fieldCount int, | ||
generation uint32, | ||
expiration uint32, | ||
) Error | ||
|
||
func newBaseReadCommand(cluster *Cluster, policy *BasePolicy, key *Key) (baseReadCommand, Error) { | ||
var partition *Partition | ||
var err Error | ||
if cluster != nil { | ||
partition, err = PartitionForRead(cluster, policy, key) | ||
if err != nil { | ||
return baseReadCommand{}, err | ||
} | ||
} | ||
|
||
return baseReadCommand{ | ||
singleCommand: newSingleCommand(cluster, key, partition), | ||
policy: policy, | ||
}, nil | ||
} | ||
|
||
func (cmd *baseReadCommand) getPolicy(ifc command) Policy { | ||
return cmd.policy | ||
} | ||
|
||
func (cmd *baseReadCommand) writeBuffer(ifc command) Error { | ||
panic(unreachable) | ||
} | ||
|
||
func (cmd *baseReadCommand) getNode(ifc command) (*Node, Error) { | ||
return cmd.partition.GetNodeRead(cmd.cluster) | ||
} | ||
|
||
func (cmd *baseReadCommand) prepareRetry(ifc command, isTimeout bool) bool { | ||
cmd.partition.PrepareRetryRead(isTimeout) | ||
return true | ||
} | ||
|
||
func (cmd *baseReadCommand) parseResult(ifc command, conn *Connection) Error { | ||
panic(unreachable) | ||
} | ||
|
||
func (cmd *baseReadCommand) handleUdfError(resultCode types.ResultCode) Error { | ||
if ret, exists := cmd.record.Bins["FAILURE"]; exists { | ||
return newError(resultCode, ret.(string)) | ||
} | ||
return newError(resultCode) | ||
} | ||
|
||
func (cmd *baseReadCommand) GetRecord() *Record { | ||
return cmd.record | ||
} | ||
|
||
func (cmd *baseReadCommand) Execute() Error { | ||
panic(unreachable) | ||
} | ||
|
||
func (cmd *baseReadCommand) commandType() commandType { | ||
return ttGet | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,102 @@ | ||
// Copyright 2014-2022 Aerospike, Inc. | ||
// | ||
// Licensed under the Apache License, Version 2.0 (the "License"); | ||
// you may not use this file except in compliance with the License. | ||
// You may obtain a copy of the License at | ||
// | ||
// http://www.apache.org/licenses/LICENSE-2.0 | ||
// | ||
// Unless required by applicable law or agreed to in writing, software | ||
// distributed under the License is distributed on an "AS IS" BASIS, | ||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
// See the License for the specific language governing permissions and | ||
// limitations under the License. | ||
|
||
package aerospike | ||
|
||
import "github.com/aerospike/aerospike-client-go/v7/types" | ||
|
||
// guarantee baseWriteCommand implements command interface | ||
var _ command = &baseWriteCommand{} | ||
|
||
type baseWriteCommand struct { | ||
singleCommand | ||
|
||
policy *WritePolicy | ||
} | ||
|
||
func newBaseWriteCommand( | ||
cluster *Cluster, | ||
policy *WritePolicy, | ||
key *Key, | ||
) (baseWriteCommand, Error) { | ||
|
||
var partition *Partition | ||
var err Error | ||
if cluster != nil { | ||
partition, err = PartitionForWrite(cluster, &policy.BasePolicy, key) | ||
if err != nil { | ||
return baseWriteCommand{}, err | ||
} | ||
} | ||
|
||
newBaseWriteCmd := baseWriteCommand{ | ||
singleCommand: newSingleCommand(cluster, key, partition), | ||
policy: policy, | ||
} | ||
|
||
return newBaseWriteCmd, nil | ||
} | ||
|
||
func (cmd *baseWriteCommand) writeBuffer(ifc command) Error { | ||
panic(unreachable) | ||
} | ||
|
||
func (cmd *baseWriteCommand) getPolicy(ifc command) Policy { | ||
return cmd.policy | ||
} | ||
|
||
func (cmd *baseWriteCommand) getNode(ifc command) (*Node, Error) { | ||
return cmd.partition.GetNodeWrite(cmd.cluster) | ||
} | ||
|
||
func (cmd *baseWriteCommand) prepareRetry(ifc command, isTimeout bool) bool { | ||
cmd.partition.PrepareRetryWrite(isTimeout) | ||
return true | ||
} | ||
|
||
func (cmd *baseWriteCommand) isRead() bool { | ||
return false | ||
} | ||
|
||
func (cmd *baseWriteCommand) parseResult(ifc command, conn *Connection) Error { | ||
panic(unreachable) | ||
} | ||
|
||
func (cmd *baseWriteCommand) Execute() Error { | ||
panic(unreachable) | ||
} | ||
|
||
func (cmd *baseWriteCommand) onInDoubt() { | ||
if cmd.policy.Txn != nil { | ||
cmd.policy.Txn.OnWriteInDoubt(cmd.key) | ||
} | ||
|
||
} | ||
|
||
func (cmd *baseWriteCommand) commandType() commandType { | ||
return ttPut | ||
} | ||
|
||
func (cmd *baseWriteCommand) parseHeader() (types.ResultCode, Error) { | ||
rp, err := newRecordParser(&cmd.baseCommand) | ||
if err != nil { | ||
return err.resultCode(), err | ||
} | ||
|
||
if err := rp.parseFields(cmd.policy.Txn, cmd.key, true); err != nil { | ||
return err.resultCode(), err | ||
} | ||
|
||
return rp.resultCode, nil | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.