summaryrefslogtreecommitdiffstats
path: root/searchcore
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2017-10-12 20:29:41 +0200
committerHenning Baldersheim <balder@yahoo-inc.com>2017-10-12 20:29:41 +0200
commit28417962f66859828ffc366cdd8c0974dbb6fbe2 (patch)
tree2b3d138091fa5e169fddf35afa0a1927769554f3 /searchcore
parent4130c7302a59f3cea0845fb1825600cc1549bc4a (diff)
Avoid using 2 different mechanisms for allowing a only one reply.
Diffstat (limited to 'searchcore')
-rw-r--r--searchcore/src/tests/proton/documentdb/feedhandler/feedhandler_test.cpp6
-rw-r--r--searchcore/src/tests/proton/feedtoken/feedtoken.cpp2
-rw-r--r--searchcore/src/vespa/searchcore/proton/common/feedtoken.cpp12
-rw-r--r--searchcore/src/vespa/searchcore/proton/common/feedtoken.h5
-rw-r--r--searchcore/src/vespa/searchcore/proton/persistenceengine/transport_latch.cpp6
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/feedhandler.cpp2
6 files changed, 14 insertions, 19 deletions
diff --git a/searchcore/src/tests/proton/documentdb/feedhandler/feedhandler_test.cpp b/searchcore/src/tests/proton/documentdb/feedhandler/feedhandler_test.cpp
index 30c0556e812..b0b06a238c9 100644
--- a/searchcore/src/tests/proton/documentdb/feedhandler/feedhandler_test.cpp
+++ b/searchcore/src/tests/proton/documentdb/feedhandler/feedhandler_test.cpp
@@ -580,8 +580,7 @@ TEST_F("require that remove of unknown document with known data type stores remo
EXPECT_EQUAL(1, f.tls_writer.store_count);
}
-TEST_F("require that partial update for non-existing document is tagged as such",
- FeedHandlerFixture)
+TEST_F("require that partial update for non-existing document is tagged as such", FeedHandlerFixture)
{
UpdateContext upCtx("id:test:searchdocument::foo", *f.schema.builder);
FeedOperation::UP op(new UpdateOperation(upCtx.bucketId, Timestamp(10), upCtx.update));
@@ -596,8 +595,7 @@ TEST_F("require that partial update for non-existing document is tagged as such"
EXPECT_EQUAL(0, f.tls_writer.store_count);
}
-TEST_F("require that partial update for non-existing document is created if specified",
- FeedHandlerFixture)
+TEST_F("require that partial update for non-existing document is created if specified", FeedHandlerFixture)
{
f.handler.setSerialNum(15);
UpdateContext upCtx("id:test:searchdocument::foo", *f.schema.builder);
diff --git a/searchcore/src/tests/proton/feedtoken/feedtoken.cpp b/searchcore/src/tests/proton/feedtoken/feedtoken.cpp
index 301f21d04a1..530c9ebef39 100644
--- a/searchcore/src/tests/proton/feedtoken/feedtoken.cpp
+++ b/searchcore/src/tests/proton/feedtoken/feedtoken.cpp
@@ -55,7 +55,7 @@ Test::testFail()
{
LocalTransport transport;
FeedToken token(transport);
- token.fail(69, "6699");
+ token.fail();
EXPECT_EQUAL(1u, transport.getReceivedCount());
}
diff --git a/searchcore/src/vespa/searchcore/proton/common/feedtoken.cpp b/searchcore/src/vespa/searchcore/proton/common/feedtoken.cpp
index 0a4f00ef6e0..008fafa332b 100644
--- a/searchcore/src/vespa/searchcore/proton/common/feedtoken.cpp
+++ b/searchcore/src/vespa/searchcore/proton/common/feedtoken.cpp
@@ -13,8 +13,7 @@ FeedToken::State::State(ITransport & transport, uint32_t numAcksRequired) :
_transport(transport),
_result(new storage::spi::Result()),
_documentWasFound(false),
- _unAckedCount(numAcksRequired),
- _lock()
+ _unAckedCount(numAcksRequired)
{
assert(_unAckedCount > 0);
}
@@ -43,11 +42,12 @@ FeedToken::State::incNeededAcks()
}
void
-FeedToken::State::fail(uint32_t, const vespalib::string &)
+FeedToken::State::fail()
{
- _unAckedCount = 0;
- vespalib::LockGuard guard(_lock);
- _transport.send(std::move(_result), _documentWasFound);
+ uint32_t prev = _unAckedCount.exchange(0);
+ if (prev > 0) {
+ _transport.send(std::move(_result), _documentWasFound);
+ }
}
} // namespace proton
diff --git a/searchcore/src/vespa/searchcore/proton/common/feedtoken.h b/searchcore/src/vespa/searchcore/proton/common/feedtoken.h
index 8f6b315f803..856c8a22652 100644
--- a/searchcore/src/vespa/searchcore/proton/common/feedtoken.h
+++ b/searchcore/src/vespa/searchcore/proton/common/feedtoken.h
@@ -32,7 +32,7 @@ private:
~State();
void incNeededAcks();
void ack();
- void fail(uint32_t errNum, const vespalib::string &errMsg);
+ void fail();
void setResult(ResultUP result, bool documentWasFound) {
_documentWasFound = documentWasFound;
_result = std::move(result);
@@ -43,7 +43,6 @@ private:
ResultUP _result;
bool _documentWasFound;
std::atomic<uint32_t> _unAckedCount;
- vespalib::Lock _lock;
};
std::shared_ptr<State> _state;
@@ -86,7 +85,7 @@ public:
* @param errNum A numerical representation of the error.
* @param errMsg A readable string detailing the error.
*/
- void fail(uint32_t errNum, const vespalib::string &errMsg) const { _state->fail(errNum, errMsg); }
+ void fail() const { _state->fail(); }
/**
* Gives you access to the underlying result.
diff --git a/searchcore/src/vespa/searchcore/proton/persistenceengine/transport_latch.cpp b/searchcore/src/vespa/searchcore/proton/persistenceengine/transport_latch.cpp
index 16813d1b56c..e0d512ae6e0 100644
--- a/searchcore/src/vespa/searchcore/proton/persistenceengine/transport_latch.cpp
+++ b/searchcore/src/vespa/searchcore/proton/persistenceengine/transport_latch.cpp
@@ -20,7 +20,7 @@ TransportLatch::send(ResultUP result, bool documentWasFound)
{
{
vespalib::LockGuard guard(_lock);
- if (!_result.get()) {
+ if (!_result) {
_result = std::move(result);
} else if (result->hasError()) {
_result.reset(new Result(mergeErrorResults(*_result, *result)));
@@ -35,9 +35,7 @@ Result
TransportLatch::mergeErrorResults(const Result &lhs, const Result &rhs)
{
Result::ErrorType error = (lhs.getErrorCode() > rhs.getErrorCode() ? lhs : rhs).getErrorCode();
- return Result(error, vespalib::make_string("%s, %s",
- lhs.getErrorMessage().c_str(),
- rhs.getErrorMessage().c_str()));
+ return Result(error, vespalib::make_string("%s, %s", lhs.getErrorMessage().c_str(), rhs.getErrorMessage().c_str()));
}
} // proton
diff --git a/searchcore/src/vespa/searchcore/proton/server/feedhandler.cpp b/searchcore/src/vespa/searchcore/proton/server/feedhandler.cpp
index 7aeaea1d1a7..9300af5c3f0 100644
--- a/searchcore/src/vespa/searchcore/proton/server/feedhandler.cpp
+++ b/searchcore/src/vespa/searchcore/proton/server/feedhandler.cpp
@@ -473,7 +473,7 @@ void feedOperationRejected(FeedToken *token, const vespalib::string &opType, con
auto message = make_string("%s operation rejected for document '%s' of type '%s': '%s'",
opType.c_str(), docId.c_str(), docTypeName.toString().c_str(), rejectMessage.c_str());
token->setResult(ResultUP(new ResultType(Result::RESOURCE_EXHAUSTED, message)), false);
- token->fail(documentapi::DocumentProtocol::ERROR_REJECTED, message);
+ token->fail();
}
}