Merge branch 'release-6.0'
# Conflicts: # versions.target
This commit is contained in:
commit
538e684f1c
|
@ -369,7 +369,7 @@ int FDBLibTLSSession::handshake() {
|
|||
case TLS_WANT_POLLOUT:
|
||||
return WANT_WRITE;
|
||||
default:
|
||||
TraceEvent("FDBLibTLSHandshakeError", uid).detail("LibTLSErrorMessage", tls_error(tls_ctx)).suppressFor(1.0, true);
|
||||
TraceEvent("FDBLibTLSHandshakeError", uid).suppressFor(1.0).detail("LibTLSErrorMessage", tls_error(tls_ctx));
|
||||
return FAILED;
|
||||
}
|
||||
}
|
||||
|
@ -389,7 +389,7 @@ int FDBLibTLSSession::read(uint8_t* data, int length) {
|
|||
return (int)n;
|
||||
}
|
||||
if (n == 0) {
|
||||
TraceEvent("FDBLibTLSReadEOF").suppressFor(1.0, true);
|
||||
TraceEvent("FDBLibTLSReadEOF").suppressFor(1.0);
|
||||
return FAILED;
|
||||
}
|
||||
if (n == TLS_WANT_POLLIN)
|
||||
|
@ -397,7 +397,7 @@ int FDBLibTLSSession::read(uint8_t* data, int length) {
|
|||
if (n == TLS_WANT_POLLOUT)
|
||||
return WANT_WRITE;
|
||||
|
||||
TraceEvent("FDBLibTLSReadError", uid).detail("LibTLSErrorMessage", tls_error(tls_ctx)).suppressFor(1.0, true);
|
||||
TraceEvent("FDBLibTLSReadError", uid).suppressFor(1.0).detail("LibTLSErrorMessage", tls_error(tls_ctx));
|
||||
return FAILED;
|
||||
}
|
||||
|
||||
|
@ -416,7 +416,7 @@ int FDBLibTLSSession::write(const uint8_t* data, int length) {
|
|||
return (int)n;
|
||||
}
|
||||
if (n == 0) {
|
||||
TraceEvent("FDBLibTLSWriteEOF", uid).suppressFor(1.0, true);
|
||||
TraceEvent("FDBLibTLSWriteEOF", uid).suppressFor(1.0);
|
||||
return FAILED;
|
||||
}
|
||||
if (n == TLS_WANT_POLLIN)
|
||||
|
@ -424,6 +424,6 @@ int FDBLibTLSSession::write(const uint8_t* data, int length) {
|
|||
if (n == TLS_WANT_POLLOUT)
|
||||
return WANT_WRITE;
|
||||
|
||||
TraceEvent("FDBLibTLSWriteError", uid).detail("LibTLSErrorMessage", tls_error(tls_ctx)).suppressFor(1.0, true);
|
||||
TraceEvent("FDBLibTLSWriteError", uid).suppressFor(1.0).detail("LibTLSErrorMessage", tls_error(tls_ctx));
|
||||
return FAILED;
|
||||
}
|
||||
|
|
|
@ -192,12 +192,17 @@ var apiVersion int
|
|||
var networkStarted bool
|
||||
var networkMutex sync.Mutex
|
||||
|
||||
type DatabaseId struct {
|
||||
clusterFile string
|
||||
dbName string
|
||||
}
|
||||
|
||||
var openClusters map[string]Cluster
|
||||
var openDatabases map[string]Database
|
||||
var openDatabases map[DatabaseId]Database
|
||||
|
||||
func init() {
|
||||
openClusters = make(map[string]Cluster)
|
||||
openDatabases = make(map[string]Database)
|
||||
openDatabases = make(map[DatabaseId]Database)
|
||||
}
|
||||
|
||||
func startNetwork() error {
|
||||
|
@ -287,13 +292,13 @@ func Open(clusterFile string, dbName []byte) (Database, error) {
|
|||
openClusters[clusterFile] = cluster
|
||||
}
|
||||
|
||||
db, ok := openDatabases[string(dbName)]
|
||||
db, ok := openDatabases[DatabaseId{clusterFile, string(dbName)}]
|
||||
if !ok {
|
||||
db, e = cluster.OpenDatabase(dbName)
|
||||
if e != nil {
|
||||
return Database{}, e
|
||||
}
|
||||
openDatabases[string(dbName)] = db
|
||||
openDatabases[DatabaseId{clusterFile, string(dbName)}] = db
|
||||
}
|
||||
|
||||
return db, nil
|
||||
|
|
|
@ -45,7 +45,7 @@ class FDBDatabase extends NativeObjectWrapper implements Database, OptionConsume
|
|||
|
||||
@Override
|
||||
public <T> T run(Function<? super Transaction, T> retryable, Executor e) {
|
||||
Transaction t = this.createTransaction();
|
||||
Transaction t = this.createTransaction(e);
|
||||
try {
|
||||
while (true) {
|
||||
try {
|
||||
|
@ -63,7 +63,7 @@ class FDBDatabase extends NativeObjectWrapper implements Database, OptionConsume
|
|||
|
||||
@Override
|
||||
public <T> T read(Function<? super ReadTransaction, T> retryable, Executor e) {
|
||||
return this.run(retryable);
|
||||
return this.run(retryable, e);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -10,38 +10,38 @@ macOS
|
|||
|
||||
The macOS installation package is supported on macOS 10.7+. It includes the client and (optionally) the server.
|
||||
|
||||
* `FoundationDB-6.0.3.pkg <https://www.foundationdb.org/downloads/6.0.3/macOS/installers/FoundationDB-6.0.3.pkg>`_
|
||||
* `FoundationDB-6.0.4.pkg <https://www.foundationdb.org/downloads/6.0.4/macOS/installers/FoundationDB-6.0.4.pkg>`_
|
||||
|
||||
Ubuntu
|
||||
------
|
||||
|
||||
The Ubuntu packages are supported on 64-bit Ubuntu 12.04+, but beware of the Linux kernel bug in Ubuntu 12.x.
|
||||
|
||||
* `foundationdb-clients-6.0.3-1_amd64.deb <https://www.foundationdb.org/downloads/6.0.3/ubuntu/installers/foundationdb-clients_6.0.3-1_amd64.deb>`_
|
||||
* `foundationdb-server-6.0.3-1_amd64.deb <https://www.foundationdb.org/downloads/6.0.3/ubuntu/installers/foundationdb-server_6.0.3-1_amd64.deb>`_ (depends on the clients package)
|
||||
* `foundationdb-clients-6.0.4-1_amd64.deb <https://www.foundationdb.org/downloads/6.0.4/ubuntu/installers/foundationdb-clients_6.0.4-1_amd64.deb>`_
|
||||
* `foundationdb-server-6.0.4-1_amd64.deb <https://www.foundationdb.org/downloads/6.0.4/ubuntu/installers/foundationdb-server_6.0.4-1_amd64.deb>`_ (depends on the clients package)
|
||||
|
||||
RHEL/CentOS EL6
|
||||
---------------
|
||||
|
||||
The RHEL/CentOS EL6 packages are supported on 64-bit RHEL/CentOS 6.x.
|
||||
|
||||
* `foundationdb-clients-6.0.3-1.el6.x86_64.rpm <https://www.foundationdb.org/downloads/6.0.3/rhel6/installers/foundationdb-clients-6.0.3-1.el6.x86_64.rpm>`_
|
||||
* `foundationdb-server-6.0.3-1.el6.x86_64.rpm <https://www.foundationdb.org/downloads/6.0.3/rhel6/installers/foundationdb-server-6.0.3-1.el6.x86_64.rpm>`_ (depends on the clients package)
|
||||
* `foundationdb-clients-6.0.4-1.el6.x86_64.rpm <https://www.foundationdb.org/downloads/6.0.4/rhel6/installers/foundationdb-clients-6.0.4-1.el6.x86_64.rpm>`_
|
||||
* `foundationdb-server-6.0.4-1.el6.x86_64.rpm <https://www.foundationdb.org/downloads/6.0.4/rhel6/installers/foundationdb-server-6.0.4-1.el6.x86_64.rpm>`_ (depends on the clients package)
|
||||
|
||||
RHEL/CentOS EL7
|
||||
---------------
|
||||
|
||||
The RHEL/CentOS EL7 packages are supported on 64-bit RHEL/CentOS 7.x.
|
||||
|
||||
* `foundationdb-clients-6.0.3-1.el7.x86_64.rpm <https://www.foundationdb.org/downloads/6.0.3/rhel7/installers/foundationdb-clients-6.0.3-1.el7.x86_64.rpm>`_
|
||||
* `foundationdb-server-6.0.3-1.el7.x86_64.rpm <https://www.foundationdb.org/downloads/6.0.3/rhel7/installers/foundationdb-server-6.0.3-1.el7.x86_64.rpm>`_ (depends on the clients package)
|
||||
* `foundationdb-clients-6.0.4-1.el7.x86_64.rpm <https://www.foundationdb.org/downloads/6.0.4/rhel7/installers/foundationdb-clients-6.0.4-1.el7.x86_64.rpm>`_
|
||||
* `foundationdb-server-6.0.4-1.el7.x86_64.rpm <https://www.foundationdb.org/downloads/6.0.4/rhel7/installers/foundationdb-server-6.0.4-1.el7.x86_64.rpm>`_ (depends on the clients package)
|
||||
|
||||
Windows
|
||||
-------
|
||||
|
||||
The Windows installer is supported on 64-bit Windows XP and later. It includes the client and (optionally) the server.
|
||||
|
||||
* `foundationdb-6.0.3-x64.msi <https://www.foundationdb.org/downloads/6.0.3/windows/installers/foundationdb-6.0.3-x64.msi>`_
|
||||
* `foundationdb-6.0.4-x64.msi <https://www.foundationdb.org/downloads/6.0.4/windows/installers/foundationdb-6.0.4-x64.msi>`_
|
||||
|
||||
API Language Bindings
|
||||
=====================
|
||||
|
@ -58,18 +58,18 @@ On macOS and Windows, the FoundationDB Python API bindings are installed as part
|
|||
|
||||
If you need to use the FoundationDB Python API from other Python installations or paths, download the Python package:
|
||||
|
||||
* `foundationdb-6.0.3.tar.gz <https://www.foundationdb.org/downloads/6.0.3/bindings/python/foundationdb-6.0.3.tar.gz>`_
|
||||
* `foundationdb-6.0.4.tar.gz <https://www.foundationdb.org/downloads/6.0.4/bindings/python/foundationdb-6.0.4.tar.gz>`_
|
||||
|
||||
Ruby 1.9.3/2.0.0+
|
||||
-----------------
|
||||
|
||||
* `fdb-6.0.3.gem <https://www.foundationdb.org/downloads/6.0.3/bindings/ruby/fdb-6.0.3.gem>`_
|
||||
* `fdb-6.0.4.gem <https://www.foundationdb.org/downloads/6.0.4/bindings/ruby/fdb-6.0.4.gem>`_
|
||||
|
||||
Java 8+
|
||||
-------
|
||||
|
||||
* `fdb-java-6.0.3.jar <https://www.foundationdb.org/downloads/6.0.3/bindings/java/fdb-java-6.0.3.jar>`_
|
||||
* `fdb-java-6.0.3-javadoc.jar <https://www.foundationdb.org/downloads/6.0.3/bindings/java/fdb-java-6.0.3-javadoc.jar>`_
|
||||
* `fdb-java-6.0.4.jar <https://www.foundationdb.org/downloads/6.0.4/bindings/java/fdb-java-6.0.4.jar>`_
|
||||
* `fdb-java-6.0.4-javadoc.jar <https://www.foundationdb.org/downloads/6.0.4/bindings/java/fdb-java-6.0.4-javadoc.jar>`_
|
||||
|
||||
Go 1.1+
|
||||
-------
|
||||
|
|
|
@ -2,6 +2,32 @@
|
|||
Release Notes
|
||||
#############
|
||||
|
||||
5.2.8
|
||||
=====
|
||||
|
||||
Bindings
|
||||
--------
|
||||
|
||||
* Java: ``FDBDatabase::run`` and ``FDBDatabase::read`` now use the ``Executor`` provided for executing asynchronous callbacks instead of the default one for the database. `(Issue #640) <https://github.com/apple/foundationdb/issues/640>`_
|
||||
|
||||
Fixes
|
||||
-----
|
||||
|
||||
* A large number of concurrent read attempts could bring the database down after a cluster reboot. `(PR #650) <https://github.com/apple/foundationdb/pull/650>`_
|
||||
|
||||
5.2.7
|
||||
=====
|
||||
|
||||
Bindings
|
||||
--------
|
||||
|
||||
* The go bindings now caches database connections on a per-cluster basis. `(Issue #607) <https://github.com/apple/foundationdb/issues/607>`_
|
||||
|
||||
Fixes
|
||||
-----
|
||||
|
||||
* A client could fail to connect to a cluster when the cluster was upgraded to a version compatible with the client. This affected upgrades that were using the multi-version client to maintain compatibility with both versions of the cluster. `(PR #637) <https://github.com/apple/foundationdb/pull/637>`_
|
||||
|
||||
5.2.6
|
||||
=====
|
||||
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
Release Notes
|
||||
#############
|
||||
|
||||
6.0.3
|
||||
6.0.4
|
||||
=====
|
||||
|
||||
Features
|
||||
|
@ -27,13 +27,15 @@ Performance
|
|||
Fixes
|
||||
-----
|
||||
|
||||
* Backed out the changes which closed unnecessary connections. [6.0.3] `(PR #633) <https://github.com/apple/foundationdb/pull/633>`_
|
||||
* Not all endpoint failures were reported to the failure monitor.
|
||||
* Watches registered on a lagging storage server would take a long time to trigger.
|
||||
* The cluster controller would not start a new generation until it recovered its files from disk.
|
||||
* Under heavy write load, storage servers would occasionally pause for ~100ms. [6.0.2] `(PR #597) <https://github.com/apple/foundationdb/pull/597>`_
|
||||
* Storage servers were not given time to rejoin the cluster before being marked as failed. [6.0.2] `(PR #592) <https://github.com/apple/foundationdb/pull/592>`_
|
||||
* Incorrect accounting of incompatible connections led to occasional assertion failures. [6.0.3] `(PR #616) <https://github.com/apple/foundationdb/pull/616>`_
|
||||
* A client could fail to connect to a cluster when the cluster was upgraded to a version compatible with the client. This affected upgrades that were using the multi-version client to maintain compatibility with both versions of the cluster. [6.0.4] `(PR #637) <https://github.com/apple/foundationdb/pull/637>`_
|
||||
* A large number of concurrent read attempts could bring the database down after a cluster reboot. [6.0.4] `(PR #650) <https://github.com/apple/foundationdb/pull/650>`_
|
||||
* Automatic suppression of trace events which occur too frequently was happening before trace events were suppressed by other mechanisms. [6.0.4] `(PR #656) <https://github.com/apple/foundationdb/pull/656>`_
|
||||
|
||||
Status
|
||||
------
|
||||
|
|
|
@ -3087,7 +3087,7 @@ ACTOR Future<int> cli(CLIOptions opt, LineNoise* plinenoise) {
|
|||
}
|
||||
catch(Error &e) {
|
||||
//options->setOption() prints error message
|
||||
TraceEvent(SevWarn, "CLISetOptionError").detail("Option", printable(tokens[2])).error(e);
|
||||
TraceEvent(SevWarn, "CLISetOptionError").error(e).detail("Option", printable(tokens[2]));
|
||||
is_error = true;
|
||||
}
|
||||
}
|
||||
|
@ -3138,7 +3138,7 @@ ACTOR Future<int> runCli(CLIOptions opt) {
|
|||
linenoise.historyLoad(historyFilename);
|
||||
}
|
||||
catch(Error &e) {
|
||||
TraceEvent(SevWarnAlways, "ErrorLoadingCliHistory").detail("Filename", historyFilename.empty() ? "<unknown>" : historyFilename).error(e).GetLastError();
|
||||
TraceEvent(SevWarnAlways, "ErrorLoadingCliHistory").error(e).detail("Filename", historyFilename.empty() ? "<unknown>" : historyFilename).GetLastError();
|
||||
}
|
||||
|
||||
state int result = wait(cli(opt, &linenoise));
|
||||
|
@ -3148,7 +3148,7 @@ ACTOR Future<int> runCli(CLIOptions opt) {
|
|||
linenoise.historySave(historyFilename);
|
||||
}
|
||||
catch(Error &e) {
|
||||
TraceEvent(SevWarnAlways, "ErrorSavingCliHistory").detail("Filename", historyFilename).error(e).GetLastError();
|
||||
TraceEvent(SevWarnAlways, "ErrorSavingCliHistory").error(e).detail("Filename", historyFilename).GetLastError();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -793,8 +793,7 @@ public:
|
|||
Void _ = wait(f->finish());
|
||||
return Void();
|
||||
} catch(Error &e) {
|
||||
if(e.code() != error_code_actor_cancelled)
|
||||
TraceEvent(SevWarn, "BackupContainerWritePropertyFailed").detail("Path", path).error(e);
|
||||
TraceEvent(SevWarn, "BackupContainerWritePropertyFailed").error(e).detail("Path", path);
|
||||
throw;
|
||||
}
|
||||
}
|
||||
|
@ -816,8 +815,7 @@ public:
|
|||
} catch(Error &e) {
|
||||
if(e.code() == error_code_file_not_found)
|
||||
return Optional<Version>();
|
||||
if(e.code() != error_code_actor_cancelled)
|
||||
TraceEvent(SevWarn, "BackupContainerReadPropertyFailed").detail("Path", path).error(e);
|
||||
TraceEvent(SevWarn, "BackupContainerReadPropertyFailed").error(e).detail("Path", path);
|
||||
throw;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -596,12 +596,12 @@ namespace fileBackup {
|
|||
|
||||
} catch(Error &e) {
|
||||
TraceEvent(SevWarn, "FileRestoreCorruptRangeFileBlock")
|
||||
.error(e)
|
||||
.detail("Filename", file->getFilename())
|
||||
.detail("BlockOffset", offset)
|
||||
.detail("BlockLen", len)
|
||||
.detail("ErrorRelativeOffset", reader.rptr - buf.begin())
|
||||
.detail("ErrorAbsoluteOffset", reader.rptr - buf.begin() + offset)
|
||||
.error(e);
|
||||
.detail("ErrorAbsoluteOffset", reader.rptr - buf.begin() + offset);
|
||||
throw;
|
||||
}
|
||||
}
|
||||
|
@ -690,12 +690,12 @@ namespace fileBackup {
|
|||
|
||||
} catch(Error &e) {
|
||||
TraceEvent(SevWarn, "FileRestoreCorruptLogFileBlock")
|
||||
.error(e)
|
||||
.detail("Filename", file->getFilename())
|
||||
.detail("BlockOffset", offset)
|
||||
.detail("BlockLen", len)
|
||||
.detail("ErrorRelativeOffset", reader.rptr - buf.begin())
|
||||
.detail("ErrorAbsoluteOffset", reader.rptr - buf.begin() + offset)
|
||||
.error(e);
|
||||
.detail("ErrorAbsoluteOffset", reader.rptr - buf.begin() + offset);
|
||||
throw;
|
||||
}
|
||||
}
|
||||
|
@ -1047,11 +1047,11 @@ namespace fileBackup {
|
|||
state Key endKey = Params.endKey().get(task);
|
||||
|
||||
TraceEvent("FileBackupRangeStart")
|
||||
.suppressFor(60)
|
||||
.detail("BackupUID", BackupConfig(task).getUid())
|
||||
.detail("BeginKey", Params.beginKey().get(task).printable())
|
||||
.detail("EndKey", Params.endKey().get(task).printable())
|
||||
.detail("TaskKey", task->key.printable())
|
||||
.suppressFor(60, true);
|
||||
.detail("TaskKey", task->key.printable());
|
||||
|
||||
// When a key range task saves the last chunk of progress and then the executor dies, when the task continues
|
||||
// its beginKey and endKey will be equal but there is no work to be done.
|
||||
|
@ -1111,14 +1111,14 @@ namespace fileBackup {
|
|||
|
||||
bool usedFile = wait(finishRangeFile(outFile, cx, task, taskBucket, KeyRangeRef(beginKey, nextKey), outVersion));
|
||||
TraceEvent("FileBackupWroteRangeFile")
|
||||
.suppressFor(60)
|
||||
.detail("BackupUID", backup.getUid())
|
||||
.detail("Size", outFile->size())
|
||||
.detail("Keys", nrKeys)
|
||||
.detail("ReadVersion", outVersion)
|
||||
.detail("BeginKey", beginKey.printable())
|
||||
.detail("EndKey", nextKey.printable())
|
||||
.detail("AddedFileToMap", usedFile)
|
||||
.suppressFor(60, true);
|
||||
.detail("AddedFileToMap", usedFile);
|
||||
|
||||
nrKeys = 0;
|
||||
beginKey = nextKey;
|
||||
|
@ -1164,12 +1164,12 @@ namespace fileBackup {
|
|||
if (nextKey != keys[idx]) {
|
||||
addTaskVector.push_back(addTask(tr, taskBucket, task, task->getPriority(), nextKey, keys[idx], TaskCompletionKey::joinWith(onDone)));
|
||||
TraceEvent("FileBackupRangeSplit")
|
||||
.suppressFor(60)
|
||||
.detail("BackupUID", BackupConfig(task).getUid())
|
||||
.detail("BeginKey", Params.beginKey().get(task).printable())
|
||||
.detail("EndKey", Params.endKey().get(task).printable())
|
||||
.detail("SliceBeginKey", nextKey.printable())
|
||||
.detail("SliceEndKey", keys[idx].printable())
|
||||
.suppressFor(60, true);
|
||||
.detail("SliceEndKey", keys[idx].printable());
|
||||
}
|
||||
nextKey = keys[idx];
|
||||
}
|
||||
|
@ -1197,11 +1197,11 @@ namespace fileBackup {
|
|||
Void _ = wait(taskBucket->finish(tr, task));
|
||||
|
||||
TraceEvent("FileBackupRangeFinish")
|
||||
.suppressFor(60)
|
||||
.detail("BackupUID", BackupConfig(task).getUid())
|
||||
.detail("BeginKey", Params.beginKey().get(task).printable())
|
||||
.detail("EndKey", Params.endKey().get(task).printable())
|
||||
.detail("TaskKey", task->key.printable())
|
||||
.suppressFor(60, true);
|
||||
.detail("TaskKey", task->key.printable());
|
||||
|
||||
return Void();
|
||||
}
|
||||
|
@ -1540,9 +1540,9 @@ namespace fileBackup {
|
|||
loop {
|
||||
try {
|
||||
TraceEvent("FileBackupSnapshotDispatchAddingTasks")
|
||||
.suppressFor(2)
|
||||
.detail("TasksToAdd", rangesToAdd.size())
|
||||
.detail("NewBatchSize", newBatchSize)
|
||||
.suppressFor(2, true);
|
||||
.detail("NewBatchSize", newBatchSize);
|
||||
|
||||
tr->setOption(FDBTransactionOptions::ACCESS_SYSTEM_KEYS);
|
||||
tr->setOption(FDBTransactionOptions::LOCK_AWARE);
|
||||
|
@ -1609,12 +1609,12 @@ namespace fileBackup {
|
|||
addTaskFutures.push_back(success(BackupRangeTaskFunc::addTask(tr, taskBucket, task, priority, range.begin, range.end, TaskCompletionKey::joinWith(snapshotBatchFuture), Reference<TaskFuture>(), scheduledVersion)));
|
||||
|
||||
TraceEvent("FileBackupSnapshotRangeDispatched")
|
||||
.suppressFor(2)
|
||||
.detail("BackupUID", config.getUid())
|
||||
.detail("CurrentVersion", recentReadVersion)
|
||||
.detail("ScheduledVersion", scheduledVersion)
|
||||
.detail("BeginKey", range.begin.printable())
|
||||
.detail("EndKey", range.end.printable())
|
||||
.suppressFor(2);
|
||||
.detail("EndKey", range.end.printable());
|
||||
}
|
||||
else {
|
||||
// This shouldn't happen because if the transaction was already done or if another execution
|
||||
|
@ -1813,12 +1813,12 @@ namespace fileBackup {
|
|||
Void _ = wait(outFile->finish());
|
||||
|
||||
TraceEvent("FileBackupWroteLogFile")
|
||||
.suppressFor(60)
|
||||
.detail("BackupUID", config.getUid())
|
||||
.detail("Size", outFile->size())
|
||||
.detail("BeginVersion", beginVersion)
|
||||
.detail("EndVersion", endVersion)
|
||||
.detail("LastReadVersion", latestVersion)
|
||||
.suppressFor(60, true);
|
||||
.detail("LastReadVersion", latestVersion);
|
||||
|
||||
Params.fileSize().set(task, outFile->size());
|
||||
|
||||
|
@ -2017,10 +2017,10 @@ namespace fileBackup {
|
|||
state Version endVersion = std::max<Version>( tr->getReadVersion().get() + 1, beginVersion + (CLIENT_KNOBS->BACKUP_MAX_LOG_RANGES-1)*CLIENT_KNOBS->LOG_RANGE_BLOCK_SIZE );
|
||||
|
||||
TraceEvent("FileBackupLogDispatch")
|
||||
.suppressFor(60)
|
||||
.detail("BeginVersion", beginVersion)
|
||||
.detail("EndVersion", endVersion)
|
||||
.detail("RestorableVersion", restorableVersion.orDefault(-1))
|
||||
.suppressFor(60, true);
|
||||
.detail("RestorableVersion", restorableVersion.orDefault(-1));
|
||||
|
||||
state Reference<TaskFuture> logDispatchBatchFuture = futureBucket->future(tr);
|
||||
|
||||
|
@ -2040,10 +2040,10 @@ namespace fileBackup {
|
|||
Void _ = wait(taskBucket->finish(tr, task));
|
||||
|
||||
TraceEvent("FileBackupLogsDispatchContinuing")
|
||||
.suppressFor(60)
|
||||
.detail("BackupUID", config.getUid())
|
||||
.detail("BeginVersion", beginVersion)
|
||||
.detail("EndVersion", endVersion)
|
||||
.suppressFor(60, true);
|
||||
.detail("EndVersion", endVersion);
|
||||
|
||||
return Void();
|
||||
}
|
||||
|
@ -2437,14 +2437,14 @@ namespace fileBackup {
|
|||
state int64_t readLen = Params.readLen().get(task);
|
||||
|
||||
TraceEvent("FileRestoreRangeStart")
|
||||
.suppressFor(60)
|
||||
.detail("RestoreUID", restore.getUid())
|
||||
.detail("FileName", rangeFile.fileName)
|
||||
.detail("FileVersion", rangeFile.version)
|
||||
.detail("FileSize", rangeFile.fileSize)
|
||||
.detail("ReadOffset", readOffset)
|
||||
.detail("ReadLen", readLen)
|
||||
.detail("TaskInstance", (uint64_t)this)
|
||||
.suppressFor(60, true);
|
||||
.detail("TaskInstance", (uint64_t)this);
|
||||
|
||||
state Reference<ReadYourWritesTransaction> tr( new ReadYourWritesTransaction(cx) );
|
||||
state Future<Reference<IBackupContainer>> bc;
|
||||
|
@ -2554,6 +2554,7 @@ namespace fileBackup {
|
|||
Void _ = wait(tr->commit());
|
||||
|
||||
TraceEvent("FileRestoreCommittedRange")
|
||||
.suppressFor(60)
|
||||
.detail("RestoreUID", restore.getUid())
|
||||
.detail("FileName", rangeFile.fileName)
|
||||
.detail("FileVersion", rangeFile.version)
|
||||
|
@ -2568,8 +2569,7 @@ namespace fileBackup {
|
|||
.detail("DataSize", data.size())
|
||||
.detail("Bytes", txBytes)
|
||||
.detail("OriginalFileRange", printable(originalFileRange))
|
||||
.detail("TaskInstance", (uint64_t)this)
|
||||
.suppressFor(60, true);
|
||||
.detail("TaskInstance", (uint64_t)this);
|
||||
|
||||
// Commit succeeded, so advance starting point
|
||||
start = i;
|
||||
|
@ -2650,6 +2650,7 @@ namespace fileBackup {
|
|||
state int64_t readLen = Params.readLen().get(task);
|
||||
|
||||
TraceEvent("FileRestoreLogStart")
|
||||
.suppressFor(60)
|
||||
.detail("RestoreUID", restore.getUid())
|
||||
.detail("FileName", logFile.fileName)
|
||||
.detail("FileBeginVersion", logFile.version)
|
||||
|
@ -2657,8 +2658,7 @@ namespace fileBackup {
|
|||
.detail("FileSize", logFile.fileSize)
|
||||
.detail("ReadOffset", readOffset)
|
||||
.detail("ReadLen", readLen)
|
||||
.detail("TaskInstance", (uint64_t)this)
|
||||
.suppressFor(60, true);
|
||||
.detail("TaskInstance", (uint64_t)this);
|
||||
|
||||
state Reference<ReadYourWritesTransaction> tr( new ReadYourWritesTransaction(cx) );
|
||||
state Reference<IBackupContainer> bc;
|
||||
|
@ -2718,6 +2718,7 @@ namespace fileBackup {
|
|||
Void _ = wait(tr->commit());
|
||||
|
||||
TraceEvent("FileRestoreCommittedLog")
|
||||
.suppressFor(60)
|
||||
.detail("RestoreUID", restore.getUid())
|
||||
.detail("FileName", logFile.fileName)
|
||||
.detail("FileBeginVersion", logFile.version)
|
||||
|
@ -2730,8 +2731,7 @@ namespace fileBackup {
|
|||
.detail("EndIndex", i)
|
||||
.detail("DataSize", data.size())
|
||||
.detail("Bytes", txBytes)
|
||||
.detail("TaskInstance", (uint64_t)this)
|
||||
.suppressFor(60, true);
|
||||
.detail("TaskInstance", (uint64_t)this);
|
||||
|
||||
// Commit succeeded, so advance starting point
|
||||
start = i;
|
||||
|
@ -2981,10 +2981,10 @@ namespace fileBackup {
|
|||
beginBlock = 0;
|
||||
|
||||
TraceEvent("FileRestoreDispatchedFile")
|
||||
.suppressFor(60)
|
||||
.detail("RestoreUID", restore.getUid())
|
||||
.detail("FileName", f.fileName)
|
||||
.detail("TaskInstance", (uint64_t)this)
|
||||
.suppressFor(60, true);
|
||||
.detail("TaskInstance", (uint64_t)this);
|
||||
}
|
||||
|
||||
// If no blocks were dispatched then the next dispatch task should run now and be joined with the allPartsDone future
|
||||
|
|
|
@ -56,7 +56,7 @@ struct MasterProxyInterface {
|
|||
getConsistentReadVersion.getEndpoint(TaskProxyGetConsistentReadVersion);
|
||||
getRawCommittedVersion.getEndpoint(TaskProxyGetRawCommittedVersion);
|
||||
commit.getEndpoint(TaskProxyCommitDispatcher);
|
||||
getKeyServersLocations.getEndpoint(TaskProxyGetKeyServersLocations);
|
||||
//getKeyServersLocations.getEndpoint(TaskProxyGetKeyServersLocations); //do not increase the priority of these requests, because clients cans bring down the cluster with too many of these messages.
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
@ -99,7 +99,7 @@ bool ClusterConnectionFile::fileContentsUpToDate(ClusterConnectionString &fileCo
|
|||
return fileConnectionString.toString() == cs.toString();
|
||||
}
|
||||
catch (Error& e) {
|
||||
TraceEvent(SevWarnAlways, "ClusterFileError").detail("Filename", filename).error(e);
|
||||
TraceEvent(SevWarnAlways, "ClusterFileError").error(e).detail("Filename", filename);
|
||||
return false; // Swallow the error and report that the file is out of date
|
||||
}
|
||||
}
|
||||
|
@ -118,7 +118,7 @@ bool ClusterConnectionFile::writeFile() {
|
|||
|
||||
return true;
|
||||
} catch( Error &e ) {
|
||||
TraceEvent(SevWarnAlways, "UnableToChangeConnectionFile").detail("Filename", filename).detail("ConnStr", cs.toString()).error(e);
|
||||
TraceEvent(SevWarnAlways, "UnableToChangeConnectionFile").error(e).detail("Filename", filename).detail("ConnStr", cs.toString());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -615,7 +615,7 @@ void MultiVersionDatabase::DatabaseState::fire(const Void &unused, int& userPara
|
|||
}
|
||||
catch(Error &e) {
|
||||
optionFailed = true;
|
||||
TraceEvent(SevError, "DatabaseVersionChangeOptionError").detail("Option", option.first).detail("OptionValue", printable(option.second)).error(e);
|
||||
TraceEvent(SevError, "DatabaseVersionChangeOptionError").error(e).detail("Option", option.first).detail("OptionValue", printable(option.second));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -811,7 +811,7 @@ void MultiVersionCluster::Connector::error(const Error& e, int& userParam) {
|
|||
// TODO: is it right to abandon this connection attempt?
|
||||
client->failed = true;
|
||||
MultiVersionApi::api->updateSupportedVersions();
|
||||
TraceEvent(SevError, "ClusterConnectionError").detail("ClientLibrary", this->client->libPath).error(e);
|
||||
TraceEvent(SevError, "ClusterConnectionError").error(e).detail("ClientLibrary", this->client->libPath);
|
||||
}
|
||||
|
||||
delref();
|
||||
|
@ -850,7 +850,7 @@ void MultiVersionCluster::ClusterState::stateChanged() {
|
|||
}
|
||||
catch(Error &e) {
|
||||
optionLock.leave();
|
||||
TraceEvent(SevError, "ClusterVersionChangeOptionError").detail("Option", option.first).detail("OptionValue", printable(option.second)).detail("LibPath", clients[newIndex]->libPath).error(e);
|
||||
TraceEvent(SevError, "ClusterVersionChangeOptionError").error(e).detail("Option", option.first).detail("OptionValue", printable(option.second)).detail("LibPath", clients[newIndex]->libPath);
|
||||
connectionAttempts[newIndex]->connected = false;
|
||||
clients[newIndex]->failed = true;
|
||||
MultiVersionApi::api->updateSupportedVersions();
|
||||
|
@ -910,7 +910,7 @@ void MultiVersionApi::runOnExternalClients(std::function<void(Reference<ClientIn
|
|||
}
|
||||
}
|
||||
catch(Error &e) {
|
||||
TraceEvent(SevWarnAlways, "ExternalClientFailure").detail("LibPath", c->second->libPath).error(e);
|
||||
TraceEvent(SevWarnAlways, "ExternalClientFailure").error(e).detail("LibPath", c->second->libPath);
|
||||
if(e.code() == error_code_external_client_already_loaded) {
|
||||
c = externalClients.erase(c);
|
||||
continue;
|
||||
|
@ -1342,7 +1342,7 @@ void MultiVersionApi::loadEnvironmentVariableNetworkOptions() {
|
|||
}
|
||||
}
|
||||
catch(Error &e) {
|
||||
TraceEvent(SevError, "EnvironmentVariableNetworkOptionFailed").detail("Option", option.second.name).detail("Value", valueStr).error(e);
|
||||
TraceEvent(SevError, "EnvironmentVariableNetworkOptionFailed").error(e).detail("Option", option.second.name).detail("Value", valueStr);
|
||||
throw environment_variable_network_option_failed();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -528,10 +528,10 @@ ACTOR static Future<Void> monitorClientInfo( Reference<AsyncVar<Optional<Cluster
|
|||
}
|
||||
} catch( Error& e ) {
|
||||
TraceEvent(SevError, "MonitorClientInfoError")
|
||||
.error(e)
|
||||
.detail("DBName", printable(dbName))
|
||||
.detail("ConnectionFile", ccf && ccf->canGetFilename() ? ccf->getFilename() : "")
|
||||
.detail("ConnectionString", ccf ? ccf->getConnectionString().toString() : "")
|
||||
.error(e);
|
||||
.detail("ConnectionString", ccf ? ccf->getConnectionString().toString() : "");
|
||||
|
||||
throw;
|
||||
}
|
||||
|
@ -832,8 +832,8 @@ void setNetworkOption(FDBNetworkOptions::Option option, Optional<StringRef> valu
|
|||
tlsOptions->set_verify_peers({ value.get().toString() });
|
||||
} catch( Error& e ) {
|
||||
TraceEvent(SevWarnAlways, "TLSValidationSetError")
|
||||
.detail("Input", value.get().toString() )
|
||||
.error( e );
|
||||
.error( e )
|
||||
.detail("Input", value.get().toString() );
|
||||
throw invalid_option_value();
|
||||
}
|
||||
break;
|
||||
|
@ -1284,12 +1284,10 @@ ACTOR Future<Key> getKey( Database cx, KeySelector k, Future<Version> version, T
|
|||
|
||||
Void _ = wait(delay(CLIENT_KNOBS->WRONG_SHARD_SERVER_DELAY, info.taskID));
|
||||
} else {
|
||||
if(e.code() != error_code_actor_cancelled) {
|
||||
TraceEvent(SevInfo, "GetKeyError")
|
||||
.error(e)
|
||||
.detail("AtKey", printable(k.getKey()))
|
||||
.detail("Offset", k.offset);
|
||||
}
|
||||
TraceEvent(SevInfo, "GetKeyError")
|
||||
.error(e)
|
||||
.detail("AtKey", printable(k.getKey()))
|
||||
.detail("Offset", k.offset);
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
|
@ -2498,11 +2496,11 @@ Future<Void> Transaction::commitMutations() {
|
|||
size_t transactionSize = tr.transaction.mutations.expectedSize() + tr.transaction.read_conflict_ranges.expectedSize() + tr.transaction.write_conflict_ranges.expectedSize();
|
||||
if (transactionSize > (uint64_t)FLOW_KNOBS->PACKET_WARNING) {
|
||||
TraceEvent(!g_network->isSimulated() ? SevWarnAlways : SevWarn, "LargeTransaction")
|
||||
.suppressFor(1.0)
|
||||
.detail("Size", transactionSize)
|
||||
.detail("NumMutations", tr.transaction.mutations.size())
|
||||
.detail("ReadConflictSize", tr.transaction.read_conflict_ranges.expectedSize())
|
||||
.detail("WriteConflictSize", tr.transaction.write_conflict_ranges.expectedSize())
|
||||
.suppressFor(1.0);
|
||||
.detail("WriteConflictSize", tr.transaction.write_conflict_ranges.expectedSize());
|
||||
}
|
||||
|
||||
if(!apiVersionAtLeast(300)) {
|
||||
|
@ -2708,7 +2706,7 @@ ACTOR Future<GetReadVersionReply> getConsistentReadVersion( DatabaseContext *cx,
|
|||
}
|
||||
}
|
||||
} catch (Error& e) {
|
||||
if( e.code() != error_code_broken_promise && e.code() != error_code_actor_cancelled )
|
||||
if( e.code() != error_code_broken_promise )
|
||||
TraceEvent(SevError, "GetConsistentReadVersionError").error(e);
|
||||
throw;
|
||||
}
|
||||
|
|
|
@ -1905,12 +1905,11 @@ void ReadYourWritesTransaction::debugLogRetries(Optional<Error> error) {
|
|||
fprintf(stderr, "fdb WARNING: long transaction (%.2fs elapsed%s, %d retries, %s)\n", elapsed, transactionNameStr.c_str(), retries, committed ? "committed" : error.get().what());
|
||||
{
|
||||
TraceEvent trace = TraceEvent("LongTransaction");
|
||||
if(!transactionDebugInfo->transactionName.empty())
|
||||
trace.detail("TransactionName", printable(StringRef(transactionDebugInfo->transactionName)));
|
||||
|
||||
trace.detail("Elapsed", elapsed).detail("Retries", retries).detail("Committed", committed);
|
||||
if(error.present())
|
||||
trace.error(error.get(), true);
|
||||
if(!transactionDebugInfo->transactionName.empty())
|
||||
trace.detail("TransactionName", printable(StringRef(transactionDebugInfo->transactionName)));
|
||||
trace.detail("Elapsed", elapsed).detail("Retries", retries).detail("Committed", committed);
|
||||
}
|
||||
transactionDebugInfo->lastRetryLogTime = now();
|
||||
}
|
||||
|
|
|
@ -390,18 +390,18 @@ public:
|
|||
}
|
||||
} catch(Error &e) {
|
||||
TraceEvent(SevWarn, "TB_ExecuteFailure")
|
||||
.error(e)
|
||||
.detail("TaskUID", task->key.printable())
|
||||
.detail("TaskType", task->params[Task::reservedTaskParamKeyType].printable())
|
||||
.detail("Priority", task->getPriority())
|
||||
.error(e);
|
||||
.detail("Priority", task->getPriority());
|
||||
try {
|
||||
Void _ = wait(taskFunc->handleError(cx, task, e));
|
||||
} catch(Error &e) {
|
||||
TraceEvent(SevWarn, "TB_ExecuteFailureLogErrorFailed")
|
||||
.error(e) // output handleError() error instead of original task error
|
||||
.detail("TaskUID", task->key.printable())
|
||||
.detail("TaskType", task->params[Task::reservedTaskParamKeyType].printable())
|
||||
.detail("Priority", task->getPriority())
|
||||
.error(e); // output handleError() error instead of original task error
|
||||
.detail("Priority", task->getPriority());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -83,7 +83,7 @@ public:
|
|||
TraceEvent(notFound ? SevWarn : SevWarnAlways, "FileOpenError").error(e).GetLastError().detail("File", filename).detail("Flags", flags).detail("Mode", mode);
|
||||
throw e;
|
||||
}
|
||||
TraceEvent("AsyncFileOpened").detail("Filename", filename).detail("Fd", r->result).detail("Flags", flags).suppressFor(1.0);
|
||||
TraceEvent("AsyncFileOpened").suppressFor(1.0).detail("Filename", filename).detail("Fd", r->result).detail("Flags", flags);
|
||||
|
||||
if ((flags & OPEN_LOCK) && !lock_fd(r->result)) {
|
||||
TraceEvent(SevError, "UnableToLockFile").detail("Filename", filename).GetLastError();
|
||||
|
@ -251,7 +251,7 @@ private:
|
|||
static void error( const char* context, int fd, eio_req* r, Reference<ErrorInfo> const& err = Reference<ErrorInfo>() ) {
|
||||
Error e = io_error();
|
||||
errno = r->errorno;
|
||||
TraceEvent(context).detail("Fd", fd).detail("Result", r->result).GetLastError().error(e);
|
||||
TraceEvent(context).error(e).detail("Fd", fd).detail("Result", r->result).GetLastError();
|
||||
if (err) err->set(e);
|
||||
else throw e;
|
||||
}
|
||||
|
@ -261,7 +261,7 @@ private:
|
|||
state eio_req* r = eio_close(fd, 0, eio_callback, &p);
|
||||
Void _ = wait( p.getFuture() );
|
||||
if (r->result) error( "CloseError", fd, r );
|
||||
TraceEvent("AsyncFileClosed").detail("Fd", fd).suppressFor(1.0);
|
||||
TraceEvent("AsyncFileClosed").suppressFor(1.0).detail("Fd", fd);
|
||||
}
|
||||
|
||||
ACTOR static Future<int> read_impl( int fd, void* data, int length, int64_t offset ) {
|
||||
|
|
|
@ -112,8 +112,8 @@ public:
|
|||
Error e = errno==ENOENT ? file_not_found() : io_error();
|
||||
int ecode = errno; // Save errno in case it is modified before it is used below
|
||||
TraceEvent ev("AsyncFileKAIOOpenFailed");
|
||||
ev.detail("Filename", filename).detailf("Flags", "%x", flags)
|
||||
.detailf("OSFlags", "%x", openFlags(flags) | O_DIRECT).detailf("Mode", "0%o", mode).error(e).GetLastError();
|
||||
ev.error(e).detail("Filename", filename).detailf("Flags", "%x", flags)
|
||||
.detailf("OSFlags", "%x", openFlags(flags) | O_DIRECT).detailf("Mode", "0%o", mode).GetLastError();
|
||||
if(ecode == EINVAL)
|
||||
ev.detail("Description", "Invalid argument - Does the target filesystem support KAIO?");
|
||||
return e;
|
||||
|
|
|
@ -238,7 +238,7 @@ public:
|
|||
state Error err = e;
|
||||
std::string currentFilename = ( wrappedFile.isReady() && !wrappedFile.isError() ) ? wrappedFile.get()->getFilename() : actualFilename;
|
||||
currentProcess->machine->openFiles.erase( currentFilename );
|
||||
//TraceEvent("AsyncFileNonDurableOpenError").detail("Filename", filename).detail("Address", currentProcess->address).error(e, true).detail("Addr", g_simulator.getCurrentProcess()->address);
|
||||
//TraceEvent("AsyncFileNonDurableOpenError").error(e, true).detail("Filename", filename).detail("Address", currentProcess->address).detail("Addr", g_simulator.getCurrentProcess()->address);
|
||||
Void _ = wait( g_simulator.onProcess( currentProcess, currentTaskID ) );
|
||||
throw err;
|
||||
}
|
||||
|
|
|
@ -93,7 +93,7 @@ public:
|
|||
static void onReadReady( Promise<int> onReady, const boost::system::error_code& error, size_t bytesRead ) {
|
||||
if (error) {
|
||||
Error e = io_error();
|
||||
TraceEvent("AsyncReadError").GetLastError().error(e)
|
||||
TraceEvent("AsyncReadError").error(e).GetLastError()
|
||||
.detail("ASIOCode", error.value())
|
||||
.detail("ASIOMessage", error.message());
|
||||
onReady.sendError(e);
|
||||
|
@ -104,7 +104,7 @@ public:
|
|||
static void onWriteReady( Promise<Void> onReady, size_t bytesExpected, const boost::system::error_code& error, size_t bytesWritten ) {
|
||||
if (error) {
|
||||
Error e = io_error();
|
||||
TraceEvent("AsyncWriteError").GetLastError().error(e)
|
||||
TraceEvent("AsyncWriteError").error(e).GetLastError()
|
||||
.detail("ASIOCode", error.value())
|
||||
.detail("ASIOMessage", error.message());
|
||||
onReady.sendError(e);
|
||||
|
|
|
@ -134,12 +134,12 @@ private:
|
|||
if(history.checksum != 0 && history.checksum != checksum) {
|
||||
// For reads, verify the stored sum if it is not 0. If it fails, clear it.
|
||||
TraceEvent (SevError, "AsyncFileLostWriteDetected")
|
||||
.error(checksum_failed())
|
||||
.detail("Filename", m_f->getFilename())
|
||||
.detail("PageNumber", page)
|
||||
.detail("ChecksumOfPage", checksum)
|
||||
.detail("ChecksumHistory", history.checksum)
|
||||
.detail("LastWriteTime", history.timestamp)
|
||||
.error(checksum_failed());
|
||||
.detail("LastWriteTime", history.timestamp);
|
||||
history.checksum = 0;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -182,7 +182,7 @@ Reference<BlobStoreEndpoint> BlobStoreEndpoint::fromString(std::string const &ur
|
|||
} catch(std::string &err) {
|
||||
if(error != nullptr)
|
||||
*error = err;
|
||||
TraceEvent(SevWarnAlways, "BlobStoreEndpointBadURL").detail("Description", err).detail("Format", getURLFormat()).detail("URL", url).suppressFor(60, true);
|
||||
TraceEvent(SevWarnAlways, "BlobStoreEndpointBadURL").suppressFor(60).detail("Description", err).detail("Format", getURLFormat()).detail("URL", url);
|
||||
throw backup_invalid_url();
|
||||
}
|
||||
}
|
||||
|
@ -341,11 +341,11 @@ ACTOR Future<Optional<json_spirit::mObject>> tryReadJSONFile(std::string path) {
|
|||
if(json.type() == json_spirit::obj_type)
|
||||
return json.get_obj();
|
||||
else
|
||||
TraceEvent(SevWarn, "BlobCredentialFileNotJSONObject").detail("File", path).suppressFor(60, true);
|
||||
TraceEvent(SevWarn, "BlobCredentialFileNotJSONObject").suppressFor(60).detail("File", path);
|
||||
|
||||
} catch(Error &e) {
|
||||
if(e.code() != error_code_actor_cancelled)
|
||||
TraceEvent(SevWarn, errorEventType).detail("File", path).error(e).suppressFor(60, true);
|
||||
TraceEvent(SevWarn, errorEventType).error(e).suppressFor(60).detail("File", path);
|
||||
}
|
||||
|
||||
return Optional<json_spirit::mObject>();
|
||||
|
@ -408,10 +408,9 @@ ACTOR Future<BlobStoreEndpoint::ReusableConnection> connect_impl(Reference<BlobS
|
|||
|
||||
// If the connection expires in the future then return it
|
||||
if(rconn.expirationTime > now()) {
|
||||
TraceEvent("BlobStoreEndpointReusingConnected")
|
||||
TraceEvent("BlobStoreEndpointReusingConnected").suppressFor(60)
|
||||
.detail("RemoteEndpoint", rconn.conn->getPeerAddress())
|
||||
.detail("ExpiresIn", rconn.expirationTime - now())
|
||||
.suppressFor(60, true);
|
||||
.detail("ExpiresIn", rconn.expirationTime - now());
|
||||
return rconn;
|
||||
}
|
||||
}
|
||||
|
@ -420,10 +419,9 @@ ACTOR Future<BlobStoreEndpoint::ReusableConnection> connect_impl(Reference<BlobS
|
|||
service = b->knobs.secure_connection ? "https" : "http";
|
||||
state Reference<IConnection> conn = wait(INetworkConnections::net()->connect(b->host, service, b->knobs.secure_connection ? true : false));
|
||||
|
||||
TraceEvent("BlobStoreEndpointNewConnection")
|
||||
TraceEvent("BlobStoreEndpointNewConnection").suppressFor(60)
|
||||
.detail("RemoteEndpoint", conn->getPeerAddress())
|
||||
.detail("ExpiresIn", b->knobs.max_connection_life)
|
||||
.suppressFor(60, true);
|
||||
.detail("ExpiresIn", b->knobs.max_connection_life);
|
||||
|
||||
if(b->lookupSecret)
|
||||
Void _ = wait(b->updateSecret());
|
||||
|
@ -521,6 +519,16 @@ ACTOR Future<Reference<HTTP::Response>> doRequest_impl(Reference<BlobStoreEndpoi
|
|||
retryable = retryable && (thisTry < maxTries);
|
||||
|
||||
TraceEvent event(SevWarn, retryable ? "BlobStoreEndpointRequestFailedRetryable" : "BlobStoreEndpointRequestFailed");
|
||||
|
||||
// Attach err to trace event if present, otherwise extract some stuff from the response
|
||||
if(err.present()) {
|
||||
event.error(err.get());
|
||||
}
|
||||
event.suppressFor(60);
|
||||
if(!err.present()) {
|
||||
event.detail("ResponseCode", r->code);
|
||||
}
|
||||
|
||||
event.detail("ConnectionEstablished", connectionEstablished);
|
||||
|
||||
if(remoteAddress.present())
|
||||
|
@ -530,8 +538,7 @@ ACTOR Future<Reference<HTTP::Response>> doRequest_impl(Reference<BlobStoreEndpoi
|
|||
|
||||
event.detail("Verb", verb)
|
||||
.detail("Resource", resource)
|
||||
.detail("ThisTry", thisTry)
|
||||
.suppressFor(60, true);
|
||||
.detail("ThisTry", thisTry);
|
||||
|
||||
// If r is not valid or not code 429 then increment the try count. 429's will not count against the attempt limit.
|
||||
if(!r || r->code != 429)
|
||||
|
@ -542,13 +549,6 @@ ACTOR Future<Reference<HTTP::Response>> doRequest_impl(Reference<BlobStoreEndpoi
|
|||
// Double but limit the *next* nextRetryDelay.
|
||||
nextRetryDelay = std::min(nextRetryDelay * 2, 60.0);
|
||||
|
||||
// Attach err to trace event if present, otherwise extract some stuff from the response
|
||||
if(err.present())
|
||||
event.error(err.get());
|
||||
else {
|
||||
event.detail("ResponseCode", r->code);
|
||||
}
|
||||
|
||||
if(retryable) {
|
||||
// If r is valid then obey the Retry-After response header if present.
|
||||
if(r) {
|
||||
|
@ -702,13 +702,13 @@ ACTOR Future<Void> listBucketStream_impl(Reference<BlobStoreEndpoint> bstore, st
|
|||
lastFile = result.commonPrefixes.back();
|
||||
|
||||
if(lastFile.empty()) {
|
||||
TraceEvent(SevWarn, "BlobStoreEndpointListNoNextMarker").detail("Resource", fullResource).suppressFor(60, true);
|
||||
TraceEvent(SevWarn, "BlobStoreEndpointListNoNextMarker").suppressFor(60).detail("Resource", fullResource);
|
||||
throw backup_error();
|
||||
}
|
||||
}
|
||||
} catch(Error &e) {
|
||||
if(e.code() != error_code_actor_cancelled)
|
||||
TraceEvent(SevWarn, "BlobStoreEndpointListResultParseError").detail("Resource", fullResource).error(e).suppressFor(60, true);
|
||||
TraceEvent(SevWarn, "BlobStoreEndpointListResultParseError").error(e).suppressFor(60).detail("Resource", fullResource);
|
||||
throw http_bad_response();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -92,7 +92,7 @@ void SimpleFailureMonitor::setStatus( NetworkAddress const& address, FailureStat
|
|||
|
||||
void SimpleFailureMonitor::endpointNotFound( Endpoint const& endpoint ) {
|
||||
// SOMEDAY: Expiration (this "leaks" memory)
|
||||
TraceEvent("EndpointNotFound").detail("Address", endpoint.address).detail("Token", endpoint.token).suppressFor(1.0);
|
||||
TraceEvent("EndpointNotFound").suppressFor(1.0).detail("Address", endpoint.address).detail("Token", endpoint.token);
|
||||
endpointKnownFailed.set( endpoint, true );
|
||||
}
|
||||
|
||||
|
|
|
@ -148,6 +148,8 @@ public:
|
|||
numIncompatibleConnections(0)
|
||||
{}
|
||||
|
||||
~TransportData();
|
||||
|
||||
void initMetrics() {
|
||||
bytesSent.init(LiteralStringRef("Net2.BytesSent"));
|
||||
countPacketsReceived.init(LiteralStringRef("Net2.CountPacketsReceived"));
|
||||
|
@ -227,9 +229,10 @@ struct Peer : NonCopyable {
|
|||
double lastConnectTime;
|
||||
double reconnectionDelay;
|
||||
int peerReferences;
|
||||
bool incompatibleProtocolVersionNewer;
|
||||
|
||||
explicit Peer( TransportData* transport, NetworkAddress const& destination )
|
||||
: transport(transport), destination(destination), outgoingConnectionIdle(false), lastConnectTime(0.0), reconnectionDelay(FLOW_KNOBS->INITIAL_RECONNECTION_TIME), compatible(true), peerReferences(-1)
|
||||
: transport(transport), destination(destination), outgoingConnectionIdle(false), lastConnectTime(0.0), reconnectionDelay(FLOW_KNOBS->INITIAL_RECONNECTION_TIME), compatible(true), incompatibleProtocolVersionNewer(false), peerReferences(-1)
|
||||
{
|
||||
connect = connectionKeeper(this);
|
||||
}
|
||||
|
@ -307,8 +310,7 @@ struct Peer : NonCopyable {
|
|||
|
||||
loop {
|
||||
if(peer->peerReferences == 0 && peer->reliable.empty() && peer->unsent.empty()) {
|
||||
//FIXME: closing connections is causing client connection issues
|
||||
//throw connection_failed();
|
||||
throw connection_failed();
|
||||
}
|
||||
|
||||
Void _ = wait( delayJittered( FLOW_KNOBS->CONNECTION_MONITOR_LOOP_TIME ) );
|
||||
|
@ -374,14 +376,14 @@ struct Peer : NonCopyable {
|
|||
Void _ = wait( delayJittered( std::max(0.0, self->lastConnectTime+self->reconnectionDelay - now()) ) ); // Don't connect() to the same peer more than once per 2 sec
|
||||
self->lastConnectTime = now();
|
||||
|
||||
TraceEvent("ConnectingTo", conn ? conn->getDebugID() : UID()).detail("PeerAddr", self->destination).suppressFor(1.0);
|
||||
TraceEvent("ConnectingTo", conn ? conn->getDebugID() : UID()).suppressFor(1.0).detail("PeerAddr", self->destination);
|
||||
Reference<IConnection> _conn = wait( timeout( INetworkConnections::net()->connect(self->destination), FLOW_KNOBS->CONNECTION_MONITOR_TIMEOUT, Reference<IConnection>() ) );
|
||||
if (_conn) {
|
||||
conn = _conn;
|
||||
TraceEvent("ConnectionExchangingConnectPacket", conn->getDebugID()).detail("PeerAddr", self->destination).suppressFor(1.0);
|
||||
TraceEvent("ConnectionExchangingConnectPacket", conn->getDebugID()).suppressFor(1.0).detail("PeerAddr", self->destination);
|
||||
self->prependConnectPacket();
|
||||
} else {
|
||||
TraceEvent("ConnectionTimedOut", conn ? conn->getDebugID() : UID()).detail("PeerAddr", self->destination).suppressFor(1.0);
|
||||
TraceEvent("ConnectionTimedOut", conn ? conn->getDebugID() : UID()).suppressFor(1.0).detail("PeerAddr", self->destination);
|
||||
throw connection_failed();
|
||||
}
|
||||
|
||||
|
@ -413,10 +415,10 @@ struct Peer : NonCopyable {
|
|||
bool ok = e.code() == error_code_connection_failed || e.code() == error_code_actor_cancelled || ( g_network->isSimulated() && e.code() == error_code_checksum_failed );
|
||||
|
||||
if(self->compatible) {
|
||||
TraceEvent(ok ? SevInfo : SevWarnAlways, "ConnectionClosed", conn ? conn->getDebugID() : UID()).detail("PeerAddr", self->destination).error(e, true).suppressFor(1.0);
|
||||
TraceEvent(ok ? SevInfo : SevWarnAlways, "ConnectionClosed", conn ? conn->getDebugID() : UID()).error(e, true).suppressFor(1.0).detail("PeerAddr", self->destination);
|
||||
}
|
||||
else {
|
||||
TraceEvent(ok ? SevInfo : SevWarnAlways, "IncompatibleConnectionClosed", conn ? conn->getDebugID() : UID()).detail("PeerAddr", self->destination).error(e, true);
|
||||
TraceEvent(ok ? SevInfo : SevWarnAlways, "IncompatibleConnectionClosed", conn ? conn->getDebugID() : UID()).error(e, true).detail("PeerAddr", self->destination);
|
||||
}
|
||||
|
||||
if (conn) {
|
||||
|
@ -428,17 +430,24 @@ struct Peer : NonCopyable {
|
|||
// Try to recover, even from serious errors, by retrying
|
||||
|
||||
if(self->peerReferences <= 0 && self->reliable.empty() && self->unsent.empty()) {
|
||||
//FIXME: closing connections is causing client connection issues
|
||||
//self->connect.cancel();
|
||||
//self->transport->peers.erase(self->destination);
|
||||
//delete self;
|
||||
//return Void();
|
||||
TraceEvent("PeerDestroy").error(e).suppressFor(1.0).detail("PeerAddr", self->destination);
|
||||
self->connect.cancel();
|
||||
self->transport->peers.erase(self->destination);
|
||||
delete self;
|
||||
return Void();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
TransportData::~TransportData() {
|
||||
for(auto &p : peers) {
|
||||
p.second->connect.cancel();
|
||||
delete p.second;
|
||||
}
|
||||
}
|
||||
|
||||
ACTOR static void deliver( TransportData* self, Endpoint destination, ArenaReader reader, bool inReadSocket ) {
|
||||
int priority = self->endpoints.getPriority(destination.token);
|
||||
if (priority < TaskReadSocket || !inReadSocket) {
|
||||
|
@ -550,10 +559,10 @@ static void scanPackets( TransportData* transport, uint8_t*& unprocessed_begin,
|
|||
|
||||
if (packetLen > FLOW_KNOBS->PACKET_WARNING) {
|
||||
TraceEvent(transport->warnAlwaysForLargePacket ? SevWarnAlways : SevWarn, "Net2_LargePacket")
|
||||
.suppressFor(1.0)
|
||||
.detail("FromPeer", peerAddress.toString())
|
||||
.detail("Length", (int)packetLen)
|
||||
.detail("Token", token)
|
||||
.suppressFor(1.0);
|
||||
.detail("Token", token);
|
||||
|
||||
if(g_network->isSimulated())
|
||||
transport->warnAlwaysForLargePacket = false;
|
||||
|
@ -581,6 +590,7 @@ ACTOR static Future<Void> connectionReader(
|
|||
state bool expectConnectPacket = true;
|
||||
state bool compatible = false;
|
||||
state bool incompatiblePeerCounted = false;
|
||||
state bool incompatibleProtocolVersionNewer = false;
|
||||
state NetworkAddress peerAddress;
|
||||
state uint64_t peerProtocolVersion = 0;
|
||||
|
||||
|
@ -621,7 +631,8 @@ ACTOR static Future<Void> connectionReader(
|
|||
connectionId = p->connectionId;
|
||||
}
|
||||
|
||||
if( (p->protocolVersion&compatibleProtocolVersionMask) != (currentProtocolVersion&compatibleProtocolVersionMask) ) {
|
||||
if( (p->protocolVersion & compatibleProtocolVersionMask) != (currentProtocolVersion & compatibleProtocolVersionMask) ) {
|
||||
incompatibleProtocolVersionNewer = p->protocolVersion > currentProtocolVersion;
|
||||
NetworkAddress addr = p->canonicalRemotePort ? NetworkAddress( p->canonicalRemoteIp, p->canonicalRemotePort ) : conn->getPeerAddress();
|
||||
if(connectionId != 1) addr.port = 0;
|
||||
|
||||
|
@ -652,8 +663,9 @@ ACTOR static Future<Void> connectionReader(
|
|||
else {
|
||||
compatible = true;
|
||||
TraceEvent("ConnectionEstablished", conn->getDebugID())
|
||||
.suppressFor(1.0)
|
||||
.detail("Peer", conn->getPeerAddress())
|
||||
.detail("ConnectionId", connectionId).suppressFor(1.0);
|
||||
.detail("ConnectionId", connectionId);
|
||||
}
|
||||
|
||||
if(connectionId > 1) {
|
||||
|
@ -665,8 +677,9 @@ ACTOR static Future<Void> connectionReader(
|
|||
peerProtocolVersion = p->protocolVersion;
|
||||
if (peer != nullptr) {
|
||||
// Outgoing connection; port information should be what we expect
|
||||
TraceEvent("ConnectedOutgoing").detail("PeerAddr", NetworkAddress( p->canonicalRemoteIp, p->canonicalRemotePort ) ).suppressFor(1.0);
|
||||
TraceEvent("ConnectedOutgoing").suppressFor(1.0).detail("PeerAddr", NetworkAddress( p->canonicalRemoteIp, p->canonicalRemotePort ) );
|
||||
peer->compatible = compatible;
|
||||
peer->incompatibleProtocolVersionNewer = incompatibleProtocolVersionNewer;
|
||||
if (!compatible) {
|
||||
peer->transport->numIncompatibleConnections++;
|
||||
incompatiblePeerCounted = true;
|
||||
|
@ -678,6 +691,7 @@ ACTOR static Future<Void> connectionReader(
|
|||
}
|
||||
peer = transport->getPeer(peerAddress);
|
||||
peer->compatible = compatible;
|
||||
peer->incompatibleProtocolVersionNewer = incompatibleProtocolVersionNewer;
|
||||
if (!compatible) {
|
||||
peer->transport->numIncompatibleConnections++;
|
||||
incompatiblePeerCounted = true;
|
||||
|
@ -730,7 +744,7 @@ ACTOR static Future<Void> connectionIncoming( TransportData* self, Reference<ICo
|
|||
}
|
||||
return Void();
|
||||
} catch (Error& e) {
|
||||
TraceEvent("IncomingConnectionError", conn->getDebugID()).error(e).detail("FromAddress", conn->getPeerAddress()).suppressFor(1.0);
|
||||
TraceEvent("IncomingConnectionError", conn->getDebugID()).error(e).suppressFor(1.0).detail("FromAddress", conn->getPeerAddress());
|
||||
conn->close();
|
||||
return Void();
|
||||
}
|
||||
|
@ -742,8 +756,9 @@ ACTOR static Future<Void> listen( TransportData* self, NetworkAddress listenAddr
|
|||
try {
|
||||
loop {
|
||||
Reference<IConnection> conn = wait( listener->accept() );
|
||||
TraceEvent("ConnectionFrom", conn->getDebugID()).detail("FromAddress", conn->getPeerAddress()).suppressFor(1.0);
|
||||
TraceEvent("ConnectionFrom", conn->getDebugID()).suppressFor(1.0).detail("FromAddress", conn->getPeerAddress());
|
||||
incoming.add( connectionIncoming(self, conn) );
|
||||
Void _ = wait(delay(0));
|
||||
}
|
||||
} catch (Error& e) {
|
||||
TraceEvent(SevError, "ListenError").error(e);
|
||||
|
@ -895,7 +910,7 @@ static PacketID sendPacket( TransportData* self, ISerializeSource const& what, c
|
|||
Peer* peer = self->getPeer(destination.address, openConnection);
|
||||
|
||||
// If there isn't an open connection, a public address, or the peer isn't compatible, we can't send
|
||||
if (!peer || (peer->outgoingConnectionIdle && !destination.address.isPublic()) || (!peer->compatible && destination.token != WLTOKEN_PING_PACKET)) {
|
||||
if (!peer || (peer->outgoingConnectionIdle && !destination.address.isPublic()) || (peer->incompatibleProtocolVersionNewer && destination.token != WLTOKEN_PING_PACKET)) {
|
||||
TEST(true); // Can't send to private address without a compatible open connection
|
||||
return (PacketID)NULL;
|
||||
}
|
||||
|
@ -956,11 +971,11 @@ static PacketID sendPacket( TransportData* self, ISerializeSource const& what, c
|
|||
}
|
||||
else if (len > FLOW_KNOBS->PACKET_WARNING) {
|
||||
TraceEvent(self->warnAlwaysForLargePacket ? SevWarnAlways : SevWarn, "Net2_LargePacket")
|
||||
.suppressFor(1.0)
|
||||
.detail("ToPeer", destination.address)
|
||||
.detail("Length", (int)len)
|
||||
.detail("Token", destination.token)
|
||||
.backtrace()
|
||||
.suppressFor(1.0);
|
||||
.backtrace();
|
||||
|
||||
if(g_network->isSimulated())
|
||||
self->warnAlwaysForLargePacket = false;
|
||||
|
|
|
@ -72,7 +72,7 @@ Future<Void> batcher(PromiseStream<std::pair<std::vector<X>, int> > out, FutureS
|
|||
// Drop requests if memory is under severe pressure
|
||||
if (*commitBatchesMemBytesCount + bytes > commitBatchesMemBytesLimit) {
|
||||
x.reply.sendError(proxy_memory_limit_exceeded());
|
||||
TraceEvent(SevWarnAlways, "ProxyCommitBatchMemoryThresholdExceeded").detail("CommitBatchesMemBytesCount", *commitBatchesMemBytesCount).detail("CommitBatchesMemLimit", commitBatchesMemBytesLimit).suppressFor(60, true);
|
||||
TraceEvent(SevWarnAlways, "ProxyCommitBatchMemoryThresholdExceeded").suppressFor(60).detail("CommitBatchesMemBytesCount", *commitBatchesMemBytesCount).detail("CommitBatchesMemLimit", commitBatchesMemBytesLimit);
|
||||
continue;
|
||||
}
|
||||
|
||||
|
|
|
@ -1194,12 +1194,12 @@ public:
|
|||
TEST( kt == InjectFaults ); // Simulated machine was killed with faults
|
||||
|
||||
if (kt == KillInstantly) {
|
||||
TraceEvent(SevWarn, "FailMachine", machine->locality.zoneId()).detail("Name", machine->name).detail("Address", machine->address).detailext("ZoneId", machine->locality.zoneId()).detail("Process", describe(*machine)).detail("Rebooting", machine->rebooting).detail("Protected", protectedAddresses.count(machine->address)).backtrace();
|
||||
TraceEvent(SevWarn, "FailMachine").detail("Name", machine->name).detail("Address", machine->address).detailext("ZoneId", machine->locality.zoneId()).detail("Process", describe(*machine)).detail("Rebooting", machine->rebooting).detail("Protected", protectedAddresses.count(machine->address)).backtrace();
|
||||
// This will remove all the "tracked" messages that came from the machine being killed
|
||||
latestEventCache.clear();
|
||||
machine->failed = true;
|
||||
} else if (kt == InjectFaults) {
|
||||
TraceEvent(SevWarn, "FaultMachine", machine->locality.zoneId()).detail("Name", machine->name).detail("Address", machine->address).detailext("ZoneId", machine->locality.zoneId()).detail("Process", describe(*machine)).detail("Rebooting", machine->rebooting).detail("Protected", protectedAddresses.count(machine->address)).backtrace();
|
||||
TraceEvent(SevWarn, "FaultMachine").detail("Name", machine->name).detail("Address", machine->address).detailext("ZoneId", machine->locality.zoneId()).detail("Process", describe(*machine)).detail("Rebooting", machine->rebooting).detail("Protected", protectedAddresses.count(machine->address)).backtrace();
|
||||
should_inject_fault = simulator_should_inject_fault;
|
||||
machine->fault_injection_r = g_random->randomUniqueID().first();
|
||||
machine->fault_injection_p1 = 0.1;
|
||||
|
@ -1255,7 +1255,7 @@ public:
|
|||
TEST(kt == InjectFaults); // Trying to kill by injecting faults
|
||||
|
||||
if(speedUpSimulation && !forceKill) {
|
||||
TraceEvent(SevWarn, "AbortedKill", zoneId).detailext("ZoneId", zoneId).detail("Reason", "Unforced kill within speedy simulation.").backtrace();
|
||||
TraceEvent(SevWarn, "AbortedKill").detailext("ZoneId", zoneId).detail("Reason", "Unforced kill within speedy simulation.").backtrace();
|
||||
if (ktFinal) *ktFinal = None;
|
||||
return false;
|
||||
}
|
||||
|
@ -1273,7 +1273,7 @@ public:
|
|||
|
||||
// Do nothing, if no processes to kill
|
||||
if (processesOnMachine == 0) {
|
||||
TraceEvent(SevWarn, "AbortedKill", zoneId).detailext("ZoneId", zoneId).detail("Reason", "The target had no processes running.").detail("Processes", processesOnMachine).detail("ProcessesPerMachine", processesPerMachine).backtrace();
|
||||
TraceEvent(SevWarn, "AbortedKill").detailext("ZoneId", zoneId).detail("Reason", "The target had no processes running.").detail("Processes", processesOnMachine).detail("ProcessesPerMachine", processesPerMachine).backtrace();
|
||||
if (ktFinal) *ktFinal = None;
|
||||
return false;
|
||||
}
|
||||
|
@ -1310,24 +1310,24 @@ public:
|
|||
}
|
||||
}
|
||||
if (!canKillProcesses(processesLeft, processesDead, kt, &kt)) {
|
||||
TraceEvent("ChangedKillMachine", zoneId).detailext("ZoneId", zoneId).detail("KillType", kt).detail("OrigKillType", ktOrig).detail("ProcessesLeft", processesLeft.size()).detail("ProcessesDead", processesDead.size()).detail("TotalProcesses", machines.size()).detail("ProcessesPerMachine", processesPerMachine).detail("Protected", protectedWorker).detail("Unavailable", unavailable).detail("Excluded", excluded).detail("Cleared", cleared).detail("ProtectedTotal", protectedAddresses.size()).detail("TLogPolicy", tLogPolicy->info()).detail("StoragePolicy", storagePolicy->info());
|
||||
TraceEvent("ChangedKillMachine").detailext("ZoneId", zoneId).detail("KillType", kt).detail("OrigKillType", ktOrig).detail("ProcessesLeft", processesLeft.size()).detail("ProcessesDead", processesDead.size()).detail("TotalProcesses", machines.size()).detail("ProcessesPerMachine", processesPerMachine).detail("Protected", protectedWorker).detail("Unavailable", unavailable).detail("Excluded", excluded).detail("Cleared", cleared).detail("ProtectedTotal", protectedAddresses.size()).detail("TLogPolicy", tLogPolicy->info()).detail("StoragePolicy", storagePolicy->info());
|
||||
}
|
||||
else if ((kt == KillInstantly) || (kt == InjectFaults)) {
|
||||
TraceEvent("DeadMachine", zoneId).detailext("ZoneId", zoneId).detail("KillType", kt).detail("ProcessesLeft", processesLeft.size()).detail("ProcessesDead", processesDead.size()).detail("TotalProcesses", machines.size()).detail("ProcessesPerMachine", processesPerMachine).detail("TLogPolicy", tLogPolicy->info()).detail("StoragePolicy", storagePolicy->info());
|
||||
TraceEvent("DeadMachine").detailext("ZoneId", zoneId).detail("KillType", kt).detail("ProcessesLeft", processesLeft.size()).detail("ProcessesDead", processesDead.size()).detail("TotalProcesses", machines.size()).detail("ProcessesPerMachine", processesPerMachine).detail("TLogPolicy", tLogPolicy->info()).detail("StoragePolicy", storagePolicy->info());
|
||||
for (auto process : processesLeft) {
|
||||
TraceEvent("DeadMachineSurvivors", zoneId).detailext("ZoneId", zoneId).detail("KillType", kt).detail("ProcessesLeft", processesLeft.size()).detail("ProcessesDead", processesDead.size()).detail("SurvivingProcess", describe(*process));
|
||||
TraceEvent("DeadMachineSurvivors").detailext("ZoneId", zoneId).detail("KillType", kt).detail("ProcessesLeft", processesLeft.size()).detail("ProcessesDead", processesDead.size()).detail("SurvivingProcess", describe(*process));
|
||||
}
|
||||
for (auto process : processesDead) {
|
||||
TraceEvent("DeadMachineVictims", zoneId).detailext("ZoneId", zoneId).detail("KillType", kt).detail("ProcessesLeft", processesLeft.size()).detail("ProcessesDead", processesDead.size()).detail("VictimProcess", describe(*process));
|
||||
TraceEvent("DeadMachineVictims").detailext("ZoneId", zoneId).detail("KillType", kt).detail("ProcessesLeft", processesLeft.size()).detail("ProcessesDead", processesDead.size()).detail("VictimProcess", describe(*process));
|
||||
}
|
||||
}
|
||||
else {
|
||||
TraceEvent("ClearMachine", zoneId).detailext("ZoneId", zoneId).detail("KillType", kt).detail("ProcessesLeft", processesLeft.size()).detail("ProcessesDead", processesDead.size()).detail("TotalProcesses", machines.size()).detail("ProcessesPerMachine", processesPerMachine).detail("TLogPolicy", tLogPolicy->info()).detail("StoragePolicy", storagePolicy->info());
|
||||
TraceEvent("ClearMachine").detailext("ZoneId", zoneId).detail("KillType", kt).detail("ProcessesLeft", processesLeft.size()).detail("ProcessesDead", processesDead.size()).detail("TotalProcesses", machines.size()).detail("ProcessesPerMachine", processesPerMachine).detail("TLogPolicy", tLogPolicy->info()).detail("StoragePolicy", storagePolicy->info());
|
||||
for (auto process : processesLeft) {
|
||||
TraceEvent("ClearMachineSurvivors", zoneId).detailext("ZoneId", zoneId).detail("KillType", kt).detail("ProcessesLeft", processesLeft.size()).detail("ProcessesDead", processesDead.size()).detail("SurvivingProcess", describe(*process));
|
||||
TraceEvent("ClearMachineSurvivors").detailext("ZoneId", zoneId).detail("KillType", kt).detail("ProcessesLeft", processesLeft.size()).detail("ProcessesDead", processesDead.size()).detail("SurvivingProcess", describe(*process));
|
||||
}
|
||||
for (auto process : processesDead) {
|
||||
TraceEvent("ClearMachineVictims", zoneId).detailext("ZoneId", zoneId).detail("KillType", kt).detail("ProcessesLeft", processesLeft.size()).detail("ProcessesDead", processesDead.size()).detail("VictimProcess", describe(*process));
|
||||
TraceEvent("ClearMachineVictims").detailext("ZoneId", zoneId).detail("KillType", kt).detail("ProcessesLeft", processesLeft.size()).detail("ProcessesDead", processesDead.size()).detail("VictimProcess", describe(*process));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1337,7 +1337,7 @@ public:
|
|||
// Check if any processes on machine are rebooting
|
||||
if( processesOnMachine != processesPerMachine && kt >= RebootAndDelete ) {
|
||||
TEST(true); //Attempted reboot, but the target did not have all of its processes running
|
||||
TraceEvent(SevWarn, "AbortedKill", zoneId).detail("KillType", kt).detailext("ZoneId", zoneId).detail("Reason", "Machine processes does not match number of processes per machine").detail("Processes", processesOnMachine).detail("ProcessesPerMachine", processesPerMachine).backtrace();
|
||||
TraceEvent(SevWarn, "AbortedKill").detail("KillType", kt).detailext("ZoneId", zoneId).detail("Reason", "Machine processes does not match number of processes per machine").detail("Processes", processesOnMachine).detail("ProcessesPerMachine", processesPerMachine).backtrace();
|
||||
if (ktFinal) *ktFinal = None;
|
||||
return false;
|
||||
}
|
||||
|
@ -1345,24 +1345,24 @@ public:
|
|||
// Check if any processes on machine are rebooting
|
||||
if ( processesOnMachine != processesPerMachine ) {
|
||||
TEST(true); //Attempted reboot, but the target did not have all of its processes running
|
||||
TraceEvent(SevWarn, "AbortedKill", zoneId).detail("KillType", kt).detailext("ZoneId", zoneId).detail("Reason", "Machine processes does not match number of processes per machine").detail("Processes", processesOnMachine).detail("ProcessesPerMachine", processesPerMachine).backtrace();
|
||||
TraceEvent(SevWarn, "AbortedKill").detail("KillType", kt).detailext("ZoneId", zoneId).detail("Reason", "Machine processes does not match number of processes per machine").detail("Processes", processesOnMachine).detail("ProcessesPerMachine", processesPerMachine).backtrace();
|
||||
if (ktFinal) *ktFinal = None;
|
||||
return false;
|
||||
}
|
||||
|
||||
TraceEvent("KillMachine", zoneId).detailext("ZoneId", zoneId).detail("Kt", kt).detail("KtOrig", ktOrig).detail("KillableMachines", processesOnMachine).detail("ProcessPerMachine", processesPerMachine).detail("KillChanged", kt!=ktOrig);
|
||||
TraceEvent("KillMachine").detailext("ZoneId", zoneId).detail("Kt", kt).detail("KtOrig", ktOrig).detail("KillableMachines", processesOnMachine).detail("ProcessPerMachine", processesPerMachine).detail("KillChanged", kt!=ktOrig);
|
||||
if ( kt < RebootAndDelete ) {
|
||||
if(kt == InjectFaults && machines[zoneId].machineProcess != nullptr)
|
||||
killProcess_internal( machines[zoneId].machineProcess, kt );
|
||||
for (auto& process : machines[zoneId].processes) {
|
||||
TraceEvent("KillMachineProcess", zoneId).detail("KillType", kt).detail("Process", process->toString()).detail("StartingClass", process->startingClass.toString()).detail("Failed", process->failed).detail("Excluded", process->excluded).detail("Cleared", process->cleared).detail("Rebooting", process->rebooting);
|
||||
TraceEvent("KillMachineProcess").detail("KillType", kt).detail("Process", process->toString()).detail("StartingClass", process->startingClass.toString()).detail("Failed", process->failed).detail("Excluded", process->excluded).detail("Cleared", process->cleared).detail("Rebooting", process->rebooting);
|
||||
if (process->startingClass != ProcessClass::TesterClass)
|
||||
killProcess_internal( process, kt );
|
||||
}
|
||||
}
|
||||
else if ( kt == Reboot || kt == RebootAndDelete ) {
|
||||
for (auto& process : machines[zoneId].processes) {
|
||||
TraceEvent("KillMachineProcess", zoneId).detail("KillType", kt).detail("Process", process->toString()).detail("StartingClass", process->startingClass.toString()).detail("Failed", process->failed).detail("Excluded", process->excluded).detail("Cleared", process->cleared).detail("Rebooting", process->rebooting);
|
||||
TraceEvent("KillMachineProcess").detail("KillType", kt).detail("Process", process->toString()).detail("StartingClass", process->startingClass.toString()).detail("Failed", process->failed).detail("Excluded", process->excluded).detail("Cleared", process->cleared).detail("Rebooting", process->rebooting);
|
||||
if (process->startingClass != ProcessClass::TesterClass)
|
||||
doReboot(process, kt );
|
||||
}
|
||||
|
@ -1422,11 +1422,11 @@ public:
|
|||
TraceEvent("DeadDataCenter").detailext("DataCenter", dcId).detail("KillType", kt).detail("DcZones", datacenterZones.size()).detail("DcProcesses", dcProcesses).detail("ProcessesDead", processesDead.size()).detail("ProcessesLeft", processesLeft.size()).detail("TLogPolicy", tLogPolicy->info()).detail("StoragePolicy", storagePolicy->info());
|
||||
for (auto process : processesLeft) {
|
||||
auto zoneId = process->locality.zoneId();
|
||||
TraceEvent("DeadDcSurvivors", zoneId).detailext("ZoneId", zoneId).detail("KillType", kt).detail("ProcessesLeft", processesLeft.size()).detail("ProcessesDead", processesDead.size()).detail("SurvivingProcess", describe(*process));
|
||||
TraceEvent("DeadDcSurvivors").detailext("ZoneId", zoneId).detail("KillType", kt).detail("ProcessesLeft", processesLeft.size()).detail("ProcessesDead", processesDead.size()).detail("SurvivingProcess", describe(*process));
|
||||
}
|
||||
for (auto process : processesDead) {
|
||||
auto zoneId = process->locality.zoneId();
|
||||
TraceEvent("DeadDcVictims", zoneId).detailext("ZoneId", zoneId).detail("KillType", kt).detail("ProcessesLeft", processesLeft.size()).detail("ProcessesDead", processesDead.size()).detail("VictimProcess", describe(*process));
|
||||
TraceEvent("DeadDcVictims").detailext("ZoneId", zoneId).detail("KillType", kt).detail("ProcessesLeft", processesLeft.size()).detail("ProcessesDead", processesDead.size()).detail("VictimProcess", describe(*process));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1430,7 +1430,7 @@ ACTOR Future<Void> failureDetectionServer( UID uniqueID, FutureStream< FailureMo
|
|||
for(auto it=currentStatus.begin(); it!=currentStatus.end(); it++)
|
||||
if (it->second.penultimateRequestTime) {
|
||||
delays.push_back(it->second.latency(t));
|
||||
TraceEvent("FDData", uniqueID).detail("S", it->first.toString()).detail("L", it->second.latency(t));
|
||||
//TraceEvent("FDData", uniqueID).detail("S", it->first.toString()).detail("L", it->second.latency(t));
|
||||
}
|
||||
int pivot = std::max(0, (int)delays.size()-2);
|
||||
double pivotDelay = 0;
|
||||
|
@ -1440,7 +1440,7 @@ ACTOR Future<Void> failureDetectionServer( UID uniqueID, FutureStream< FailureMo
|
|||
}
|
||||
pivotDelay = std::max(0.0, pivotDelay - FLOW_KNOBS->SERVER_REQUEST_INTERVAL);
|
||||
|
||||
TraceEvent("FailureDetectionPoll", uniqueID).detail("PivotDelay", pivotDelay).detail("Clients", currentStatus.size());
|
||||
//TraceEvent("FailureDetectionPoll", uniqueID).detail("PivotDelay", pivotDelay).detail("Clients", currentStatus.size());
|
||||
//TraceEvent("FailureDetectionAcceptableDelay").detail("Delay", acceptableDelay1000);
|
||||
|
||||
for(auto it = currentStatus.begin(); it != currentStatus.end(); ) {
|
||||
|
|
|
@ -926,7 +926,7 @@ ACTOR Future<Void> dataDistributionRelocator( DDQueueData *self, RelocateData rd
|
|||
}
|
||||
TEST(true); //did not find a healthy destination team on the first attempt
|
||||
stuckCount++;
|
||||
TraceEvent(stuckCount > 50 ? SevWarnAlways : SevWarn, "BestTeamStuck", masterId).detail("Count", stuckCount).suppressFor(1.0);
|
||||
TraceEvent(stuckCount > 50 ? SevWarnAlways : SevWarn, "BestTeamStuck", masterId).suppressFor(1.0).detail("Count", stuckCount);
|
||||
Void _ = wait( delay( SERVER_KNOBS->BEST_TEAM_STUCK_DELAY, TaskDataDistributionLaunch ) );
|
||||
}
|
||||
|
||||
|
|
|
@ -209,7 +209,7 @@ ACTOR Future<Void> trackShardBytes(
|
|||
|
||||
shardSize->set( metrics );
|
||||
} catch( Error &e ) {
|
||||
//TraceEvent("ShardSizeUpdateError").detail("Begin", printable(keys.begin)).detail("End", printable(keys.end)).detail("TrackerID", trackerID).error(e, true);
|
||||
//TraceEvent("ShardSizeUpdateError").error(e, true).detail("Begin", printable(keys.begin)).detail("End", printable(keys.end)).detail("TrackerID", trackerID);
|
||||
Void _ = wait( tr.onError(e) );
|
||||
}
|
||||
}
|
||||
|
|
|
@ -253,7 +253,7 @@ public:
|
|||
waitfor.push_back( files[1].f->truncate( files[1].size ) );
|
||||
|
||||
if(fileSizeWarningLimit > 0 && files[1].size > fileSizeWarningLimit) {
|
||||
TraceEvent(SevWarnAlways, "DiskQueueFileTooLarge", dbgid).detail("Filename", filename(1)).detail("Size", files[1].size).suppressFor(1.0);
|
||||
TraceEvent(SevWarnAlways, "DiskQueueFileTooLarge", dbgid).suppressFor(1.0).detail("Filename", filename(1)).detail("Size", files[1].size);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -322,7 +322,7 @@ public:
|
|||
delete pageMem;
|
||||
TEST(true); // push error
|
||||
TEST(2==syncFiles.size()); // push spanning both files error
|
||||
TraceEvent(SevError, "RDQPushAndCommitError", dbgid).detail("InitialFilename0", filename).error(e, true);
|
||||
TraceEvent(SevError, "RDQPushAndCommitError", dbgid).error(e, true).detail("InitialFilename0", filename);
|
||||
|
||||
if (errorPromise.canBeSet()) errorPromise.sendError(e);
|
||||
if (pushing.canBeSet()) pushing.sendError(e);
|
||||
|
@ -428,8 +428,8 @@ public:
|
|||
.detail("File0", self->filename(0));
|
||||
} catch( Error &e ) {
|
||||
TraceEvent(SevError, "DiskQueueShutdownError", self->dbgid)
|
||||
.detail("Reason", e.code() == error_code_platform_error ? "could not delete database" : "unknown")
|
||||
.error(e,true);
|
||||
.error(e,true)
|
||||
.detail("Reason", e.code() == error_code_platform_error ? "could not delete database" : "unknown");
|
||||
error = e;
|
||||
}
|
||||
|
||||
|
@ -533,7 +533,7 @@ public:
|
|||
return result.str;
|
||||
} catch (Error& e) {
|
||||
bool ok = e.code() == error_code_file_not_found;
|
||||
TraceEvent(ok ? SevInfo : SevError, "RDQReadFirstAndLastPagesError", self->dbgid).detail("File0Name", self->files[0].dbgFilename).error(e, true);
|
||||
TraceEvent(ok ? SevInfo : SevError, "RDQReadFirstAndLastPagesError", self->dbgid).error(e, true).detail("File0Name", self->files[0].dbgFilename);
|
||||
if (!self->error.isSet()) self->error.sendError(e);
|
||||
throw;
|
||||
}
|
||||
|
@ -588,7 +588,7 @@ public:
|
|||
return result;
|
||||
} catch (Error& e) {
|
||||
TEST(true); // Read next page error
|
||||
TraceEvent(SevError, "RDQReadNextPageError", self->dbgid).detail("File0Name", self->files[0].dbgFilename).error(e, true);
|
||||
TraceEvent(SevError, "RDQReadNextPageError", self->dbgid).error(e, true).detail("File0Name", self->files[0].dbgFilename);
|
||||
if (!self->error.isSet()) self->error.sendError(e);
|
||||
throw;
|
||||
}
|
||||
|
@ -633,7 +633,7 @@ public:
|
|||
|
||||
return Void();
|
||||
} catch (Error& e) {
|
||||
TraceEvent(SevError, "RDQTruncateBeforeLastReadPageError", self->dbgid).detail("File0Name", self->files[0].dbgFilename).error(e);
|
||||
TraceEvent(SevError, "RDQTruncateBeforeLastReadPageError", self->dbgid).error(e).detail("File0Name", self->files[0].dbgFilename);
|
||||
if (!self->error.isSet()) self->error.sendError(e);
|
||||
throw;
|
||||
}
|
||||
|
@ -712,11 +712,11 @@ public:
|
|||
|
||||
if( pushedPageCount() >= 8000 ) {
|
||||
TraceEvent( warnAlwaysForMemory ? SevWarnAlways : SevWarn, "DiskQueueMemoryWarning", dbgid)
|
||||
.suppressFor(1.0)
|
||||
.detail("PushedPages", pushedPageCount())
|
||||
.detail("NextPageSeq", nextPageSeq)
|
||||
.detail("Details", format("%d pages", pushedPageCount()))
|
||||
.detail("File0Name", rawQueue->files[0].dbgFilename)
|
||||
.suppressFor(1.0);
|
||||
.detail("File0Name", rawQueue->files[0].dbgFilename);
|
||||
if(g_network->isSimulated())
|
||||
warnAlwaysForMemory = false;
|
||||
}
|
||||
|
|
|
@ -103,14 +103,14 @@ struct PageChecksumCodec {
|
|||
if(!write && sum != *pSumInPage) {
|
||||
if(!silent)
|
||||
TraceEvent (SevError, "SQLitePageChecksumFailure")
|
||||
.error(checksum_failed())
|
||||
.detail("CodecPageSize", pageSize)
|
||||
.detail("CodecReserveSize", reserveSize)
|
||||
.detail("Filename", filename)
|
||||
.detail("PageNumber", pageNumber)
|
||||
.detail("PageSize", pageLen)
|
||||
.detail("ChecksumInPage", pSumInPage->toString())
|
||||
.detail("ChecksumCalculated", sum.toString())
|
||||
.error(checksum_failed());
|
||||
.detail("ChecksumCalculated", sum.toString());
|
||||
|
||||
return false;
|
||||
}
|
||||
|
@ -1832,8 +1832,8 @@ private:
|
|||
}
|
||||
} catch (Error& e) {
|
||||
TraceEvent(SevError, "KVDoCloseError", self->logID)
|
||||
.detail("Reason", e.code() == error_code_platform_error ? "could not delete database" : "unknown")
|
||||
.error(e,true);
|
||||
.error(e,true)
|
||||
.detail("Reason", e.code() == error_code_platform_error ? "could not delete database" : "unknown");
|
||||
error = e;
|
||||
}
|
||||
|
||||
|
|
|
@ -97,14 +97,14 @@ ACTOR Future<Void> getRate(UID myID, MasterInterface master, int64_t* inTransact
|
|||
when(GetRateInfoReply rep = wait(reply)) {
|
||||
reply = Never();
|
||||
*outTransactionRate = rep.transactionRate;
|
||||
TraceEvent("MasterProxyRate", myID).detail("Rate", rep.transactionRate).detail("Lease", rep.leaseDuration).detail("ReleasedTransactions", *inTransactionCount - lastTC);
|
||||
//TraceEvent("MasterProxyRate", myID).detail("Rate", rep.transactionRate).detail("Lease", rep.leaseDuration).detail("ReleasedTransactions", *inTransactionCount - lastTC);
|
||||
lastTC = *inTransactionCount;
|
||||
leaseTimeout = delay(rep.leaseDuration);
|
||||
nextRequestTimer = delayJittered(rep.leaseDuration / 2);
|
||||
}
|
||||
when(Void _ = wait(leaseTimeout)) {
|
||||
*outTransactionRate = 0;
|
||||
TraceEvent("MasterProxyRate", myID).detail("Rate", 0).detail("Lease", "Expired");
|
||||
//TraceEvent("MasterProxyRate", myID).detail("Rate", 0).detail("Lease", "Expired");
|
||||
leaseTimeout = Never();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -314,10 +314,10 @@ ACTOR Future<Void> startMoveKeys( Database occ, KeyRange keys, vector<UID> serve
|
|||
|
||||
if(retries%10 == 0) {
|
||||
TraceEvent(retries == 50 ? SevWarnAlways : SevWarn, "StartMoveKeysRetrying", relocationIntervalId)
|
||||
.error(err)
|
||||
.detail("Keys", printable(keys))
|
||||
.detail("BeginKey", printable(begin))
|
||||
.detail("NumTries", retries)
|
||||
.error(err);
|
||||
.detail("NumTries", retries);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1005,7 +1005,7 @@ namespace oldTLog {
|
|||
logData->queueCommittedVersion.set(ver);
|
||||
self->queueCommitEnd.set(commitNumber);
|
||||
|
||||
TraceEvent("TLogCommitDurable", self->dbgid).detail("Version", ver);
|
||||
//TraceEvent("TLogCommitDurable", self->dbgid).detail("Version", ver);
|
||||
|
||||
return Void();
|
||||
}
|
||||
|
|
|
@ -74,7 +74,7 @@ ACTOR Future<int64_t> getDataInFlight( Database cx, WorkerInterface masterWorker
|
|||
sscanf(md.getValue("TotalBytes").c_str(), "%lld", &dataInFlight);
|
||||
return dataInFlight;
|
||||
} catch( Error &e ) {
|
||||
TraceEvent("QuietDatabaseFailure", masterWorker.id()).detail("Reason", "Failed to extract DataInFlight").error(e);
|
||||
TraceEvent("QuietDatabaseFailure", masterWorker.id()).error(e).detail("Reason", "Failed to extract DataInFlight");
|
||||
throw;
|
||||
}
|
||||
|
||||
|
|
|
@ -229,7 +229,7 @@ ACTOR Future<ISimulator::KillType> simulatedFDBDRebooter(
|
|||
state Future<ISimulator::KillType> onShutdown = process->onShutdown();
|
||||
|
||||
try {
|
||||
TraceEvent("SimulatedRebooterStarting", localities.zoneId()).detail("Cycles", cycles).detail("RandomId", randomId)
|
||||
TraceEvent("SimulatedRebooterStarting").detail("Cycles", cycles).detail("RandomId", randomId)
|
||||
.detailext("ZoneId", localities.zoneId())
|
||||
.detailext("DataHall", localities.dataHallId())
|
||||
.detail("Address", process->address.toString())
|
||||
|
@ -270,10 +270,10 @@ ACTOR Future<ISimulator::KillType> simulatedFDBDRebooter(
|
|||
if(e.code() != error_code_actor_cancelled)
|
||||
printf("SimulatedFDBDTerminated: %s\n", e.what());
|
||||
ASSERT( destructed || g_simulator.getCurrentProcess() == process ); // simulatedFDBD catch called on different process
|
||||
TraceEvent(e.code() == error_code_actor_cancelled || e.code() == error_code_file_not_found || destructed ? SevInfo : SevError, "SimulatedFDBDTerminated", localities.zoneId()).error(e, true);
|
||||
TraceEvent(e.code() == error_code_actor_cancelled || e.code() == error_code_file_not_found || destructed ? SevInfo : SevError, "SimulatedFDBDTerminated").error(e, true).detailext("ZoneId", localities.zoneId());
|
||||
}
|
||||
|
||||
TraceEvent("SimulatedFDBDDone", localities.zoneId()).detail("Cycles", cycles).detail("RandomId", randomId)
|
||||
TraceEvent("SimulatedFDBDDone").detail("Cycles", cycles).detail("RandomId", randomId)
|
||||
.detail("Address", process->address)
|
||||
.detail("Excluded", process->excluded)
|
||||
.detailext("ZoneId", localities.zoneId())
|
||||
|
@ -282,7 +282,7 @@ ACTOR Future<ISimulator::KillType> simulatedFDBDRebooter(
|
|||
if (!onShutdown.isReady())
|
||||
onShutdown = ISimulator::InjectFaults;
|
||||
} catch (Error& e) {
|
||||
TraceEvent(destructed ? SevInfo : SevError, "SimulatedFDBDRebooterError", localities.zoneId()).detail("RandomId", randomId).error(e, true);
|
||||
TraceEvent(destructed ? SevInfo : SevError, "SimulatedFDBDRebooterError").error(e, true).detailext("ZoneId", localities.zoneId()).detail("RandomId", randomId);
|
||||
onShutdown = e;
|
||||
}
|
||||
|
||||
|
@ -292,7 +292,7 @@ ACTOR Future<ISimulator::KillType> simulatedFDBDRebooter(
|
|||
process->rebooting = true;
|
||||
process->shutdownSignal.send(ISimulator::None);
|
||||
}
|
||||
TraceEvent("SimulatedFDBDWait", localities.zoneId()).detail("Cycles", cycles).detail("RandomId", randomId)
|
||||
TraceEvent("SimulatedFDBDWait").detail("Cycles", cycles).detail("RandomId", randomId)
|
||||
.detail("Address", process->address)
|
||||
.detail("Excluded", process->excluded)
|
||||
.detail("Rebooting", process->rebooting)
|
||||
|
@ -304,14 +304,14 @@ ACTOR Future<ISimulator::KillType> simulatedFDBDRebooter(
|
|||
g_simulator.destroyProcess( process ); // Leak memory here; the process may be used in other parts of the simulation
|
||||
|
||||
auto shutdownResult = onShutdown.get();
|
||||
TraceEvent("SimulatedFDBDShutdown", localities.zoneId()).detail("Cycles", cycles).detail("RandomId", randomId)
|
||||
TraceEvent("SimulatedFDBDShutdown").detail("Cycles", cycles).detail("RandomId", randomId)
|
||||
.detail("Address", process->address)
|
||||
.detail("Excluded", process->excluded)
|
||||
.detailext("ZoneId", localities.zoneId())
|
||||
.detail("KillType", shutdownResult);
|
||||
|
||||
if( shutdownResult < ISimulator::RebootProcessAndDelete ) {
|
||||
TraceEvent("SimulatedFDBDLowerReboot", localities.zoneId()).detail("Cycles", cycles).detail("RandomId", randomId)
|
||||
TraceEvent("SimulatedFDBDLowerReboot").detail("Cycles", cycles).detail("RandomId", randomId)
|
||||
.detail("Address", process->address)
|
||||
.detail("Excluded", process->excluded)
|
||||
.detailext("ZoneId", localities.zoneId())
|
||||
|
@ -320,7 +320,7 @@ ACTOR Future<ISimulator::KillType> simulatedFDBDRebooter(
|
|||
}
|
||||
|
||||
if( onShutdown.get() == ISimulator::RebootProcessAndDelete ) {
|
||||
TraceEvent("SimulatedFDBDRebootAndDelete", localities.zoneId()).detail("Cycles", cycles).detail("RandomId", randomId)
|
||||
TraceEvent("SimulatedFDBDRebootAndDelete").detail("Cycles", cycles).detail("RandomId", randomId)
|
||||
.detail("Address", process->address)
|
||||
.detailext("ZoneId", localities.zoneId())
|
||||
.detail("KillType", shutdownResult);
|
||||
|
@ -337,7 +337,7 @@ ACTOR Future<ISimulator::KillType> simulatedFDBDRebooter(
|
|||
}
|
||||
}
|
||||
else {
|
||||
TraceEvent("SimulatedFDBDJustRepeat", localities.zoneId()).detail("Cycles", cycles).detail("RandomId", randomId)
|
||||
TraceEvent("SimulatedFDBDJustRepeat").detail("Cycles", cycles).detail("RandomId", randomId)
|
||||
.detail("Address", process->address)
|
||||
.detailext("ZoneId", localities.zoneId())
|
||||
.detail("KillType", shutdownResult);
|
||||
|
|
|
@ -658,6 +658,7 @@ ACTOR Future<Void> updateStorage( TLogData* self ) {
|
|||
if(logData->stopped) {
|
||||
if (self->bytesInput - self->bytesDurable >= SERVER_KNOBS->TLOG_SPILL_THRESHOLD) {
|
||||
while(logData->persistentDataDurableVersion != logData->version.get()) {
|
||||
totalSize = 0;
|
||||
std::vector<std::pair<std::deque<std::pair<Version, LengthPrefixedStringRef>>::iterator, std::deque<std::pair<Version, LengthPrefixedStringRef>>::iterator>> iters;
|
||||
|
||||
for(tagLocality = 0; tagLocality < logData->tag_data.size(); tagLocality++) {
|
||||
|
@ -1107,7 +1108,7 @@ ACTOR Future<Void> doQueueCommit( TLogData* self, Reference<LogData> logData ) {
|
|||
logData->recoveryComplete.send(Void());
|
||||
}
|
||||
|
||||
TraceEvent("TLogCommitDurable", self->dbgid).detail("Version", ver);
|
||||
//TraceEvent("TLogCommitDurable", self->dbgid).detail("Version", ver);
|
||||
if(logData->logSystem->get() && (!logData->isPrimary || logData->logRouterPoppedVersion < logData->logRouterPopToVersion)) {
|
||||
logData->logRouterPoppedVersion = ver;
|
||||
logData->logSystem->get()->pop(ver, logData->remoteTag, knownCommittedVersion, logData->locality);
|
||||
|
@ -1204,7 +1205,7 @@ ACTOR Future<Void> tLogCommit(
|
|||
if(req.debugID.present())
|
||||
g_traceBatch.addEvent("CommitDebug", tlogDebugID.get().first(), "TLog.tLogCommit.Before");
|
||||
|
||||
TraceEvent("TLogCommit", logData->logId).detail("Version", req.version);
|
||||
//TraceEvent("TLogCommit", logData->logId).detail("Version", req.version);
|
||||
commitMessages(logData, req.version, req.arena, req.messages, self->bytesInput);
|
||||
|
||||
logData->knownCommittedVersion = std::max(logData->knownCommittedVersion, req.knownCommittedVersion);
|
||||
|
|
|
@ -843,7 +843,7 @@ struct TagPartitionedLogSystem : ILogSystem, ReferenceCounted<TagPartitionedLogS
|
|||
last = to.first;
|
||||
} catch (Error& e) {
|
||||
if (e.code() == error_code_actor_cancelled) throw;
|
||||
TraceEvent( (e.code() == error_code_broken_promise) ? SevInfo : SevError, "LogPopError", self->dbgid ).detail("Log", log->get().id()).error(e);
|
||||
TraceEvent( (e.code() == error_code_broken_promise) ? SevInfo : SevError, "LogPopError", self->dbgid ).error(e).detail("Log", log->get().id());
|
||||
return Void(); // Leaving outstandingPops filled in means no further pop requests to this tlog from this logSystem
|
||||
}
|
||||
}
|
||||
|
|
|
@ -200,10 +200,10 @@ static int asyncSync(sqlite3_file *pFile, int flags){
|
|||
return SQLITE_OK;
|
||||
} catch (Error& e) {
|
||||
TraceEvent("VFSSyncError")
|
||||
.error(e)
|
||||
.detail("Filename", p->filename)
|
||||
.detail("Sqlite3File", (int64_t)pFile)
|
||||
.detail("IAsyncFile", (int64_t)p->file.getPtr())
|
||||
.error(e);
|
||||
.detail("IAsyncFile", (int64_t)p->file.getPtr());
|
||||
|
||||
return SQLITE_IOERR_FSYNC;
|
||||
}
|
||||
|
@ -528,7 +528,7 @@ static int asyncOpen(
|
|||
.detail("Sqlite3File", DEBUG_DETERMINISM ? 0 : (int64_t)pFile)
|
||||
.detail("IAsyncFile", DEBUG_DETERMINISM ? 0 : (int64_t)p->file.getPtr());*/
|
||||
} catch (Error& e) {
|
||||
TraceEvent("SQLiteOpenFail").detail("Filename", p->filename).error(e);
|
||||
TraceEvent("SQLiteOpenFail").error(e).detail("Filename", p->filename);
|
||||
p->~VFSAsyncFile();
|
||||
return SQLITE_CANTOPEN;
|
||||
}
|
||||
|
@ -632,10 +632,10 @@ static int asyncFullPathname(
|
|||
memcpy(zPathOut, s.c_str(), s.size()+1);
|
||||
return SQLITE_OK;
|
||||
} catch (Error& e) {
|
||||
TraceEvent(SevError,"VFSAsyncFullPathnameError").detail("PathIn", (std::string)zPath).error(e);
|
||||
TraceEvent(SevError,"VFSAsyncFullPathnameError").error(e).detail("PathIn", (std::string)zPath);
|
||||
return SQLITE_IOERR;
|
||||
} catch(...) {
|
||||
TraceEvent(SevError,"VFSAsyncFullPathnameError").detail("PathIn", (std::string)zPath).error(unknown_error());
|
||||
TraceEvent(SevError,"VFSAsyncFullPathnameError").error(unknown_error()).detail("PathIn", (std::string)zPath);
|
||||
return SQLITE_IOERR;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1455,7 +1455,7 @@ bool changeDurableVersion( StorageServer* data, Version desiredDurableVersion )
|
|||
data->durableVersion.set( nextDurableVersion );
|
||||
if (checkFatalError.isReady()) checkFatalError.get();
|
||||
|
||||
TraceEvent("ForgotVersionsBefore", data->thisServerID).detail("Version", nextDurableVersion);
|
||||
//TraceEvent("ForgotVersionsBefore", data->thisServerID).detail("Version", nextDurableVersion);
|
||||
validate(data);
|
||||
|
||||
return nextDurableVersion == desiredDurableVersion;
|
||||
|
@ -1898,7 +1898,7 @@ ACTOR Future<Void> fetchKeys( StorageServer *data, AddingShard* shard ) {
|
|||
|
||||
break;
|
||||
} catch (Error& e) {
|
||||
TraceEvent("FKBlockFail", data->thisServerID).detail("FKID", interval.pairID).error(e,true).suppressFor(1.0);
|
||||
TraceEvent("FKBlockFail", data->thisServerID).error(e,true).suppressFor(1.0).detail("FKID", interval.pairID);
|
||||
if (e.code() == error_code_transaction_too_old){
|
||||
TEST(true); // A storage server has forgotten the history data we are fetching
|
||||
Version lastFV = fetchVersion;
|
||||
|
@ -2638,7 +2638,7 @@ ACTOR Future<Void> updateStorage(StorageServer* data) {
|
|||
Void _ = wait( yield(TaskUpdateStorage) );
|
||||
}
|
||||
|
||||
TraceEvent("StorageServerDurable", data->thisServerID).detail("Version", newOldestVersion);
|
||||
//TraceEvent("StorageServerDurable", data->thisServerID).detail("Version", newOldestVersion);
|
||||
|
||||
Void _ = wait( durableDelay );
|
||||
}
|
||||
|
|
|
@ -418,7 +418,7 @@ ACTOR Future<Void> runWorkloadAsync( Database cx, WorkloadInterface workIface, T
|
|||
setupResult = Void();
|
||||
} catch (Error& e) {
|
||||
setupResult = operation_failed();
|
||||
TraceEvent(SevError, "TestSetupError", workIface.id()).detail("Workload", workload->description()).error(e);
|
||||
TraceEvent(SevError, "TestSetupError", workIface.id()).error(e).detail("Workload", workload->description());
|
||||
if( e.code() == error_code_please_reboot || e.code() == error_code_please_reboot_delete) throw;
|
||||
}
|
||||
}
|
||||
|
@ -709,8 +709,8 @@ ACTOR Future<DistributedTestResults> runWorkload( Database cx, std::vector< Test
|
|||
metricsResults.push_back( metricTasks[i].get() );
|
||||
else
|
||||
TraceEvent(SevError, "TestFailure")
|
||||
.detail("Reason", "Metrics not retrieved")
|
||||
.error(metricTasks[i].getError())
|
||||
.detail("Reason", "Metrics not retrieved")
|
||||
.detail("From", workloads[i].metrics.getEndpoint().address);
|
||||
}
|
||||
}
|
||||
|
@ -790,7 +790,7 @@ ACTOR Future<bool> runTest( Database cx, std::vector< TesterInterface > testers,
|
|||
logMetrics( testResults.metrics );
|
||||
} catch(Error& e) {
|
||||
if( e.code() == error_code_timed_out ) {
|
||||
TraceEvent(SevError, "TestFailure").detail("Reason", "Test timed out").detail("Timeout", spec.timeout).error(e);
|
||||
TraceEvent(SevError, "TestFailure").error(e).detail("Reason", "Test timed out").detail("Timeout", spec.timeout);
|
||||
fprintf(stderr, "ERROR: Test timed out after %d seconds.\n", spec.timeout);
|
||||
testResults.failures = testers.size();
|
||||
testResults.successes = 0;
|
||||
|
@ -805,7 +805,7 @@ ACTOR Future<bool> runTest( Database cx, std::vector< TesterInterface > testers,
|
|||
try {
|
||||
Void _ = wait( timeoutError( dumpDatabase( cx, "dump after " + printable(spec.title) + ".html", allKeys ), 30.0 ) );
|
||||
} catch (Error& e) {
|
||||
TraceEvent(SevError, "TestFailure").detail("Reason", "Unable to dump database").error(e);
|
||||
TraceEvent(SevError, "TestFailure").error(e).detail("Reason", "Unable to dump database");
|
||||
ok = false;
|
||||
}
|
||||
|
||||
|
@ -819,7 +819,7 @@ ACTOR Future<bool> runTest( Database cx, std::vector< TesterInterface > testers,
|
|||
Void _ = wait(timeoutError(checkConsistency(cx, testers, database, quiescent, 10000.0, 18000, spec.databasePingDelay, dbInfo), 20000.0));
|
||||
}
|
||||
catch(Error& e) {
|
||||
TraceEvent(SevError, "TestFailure").detail("Reason", "Unable to perform consistency check").error(e);
|
||||
TraceEvent(SevError, "TestFailure").error(e).detail("Reason", "Unable to perform consistency check");
|
||||
ok = false;
|
||||
}
|
||||
}
|
||||
|
@ -1047,7 +1047,7 @@ ACTOR Future<Void> runTests( Reference<AsyncVar<Optional<struct ClusterControlle
|
|||
Void _ = wait(timeoutError(changeConfiguration(cx, testers, database, startingConfiguration), 2000.0));
|
||||
}
|
||||
catch(Error& e) {
|
||||
TraceEvent(SevError, "TestFailure").detail("Reason", "Unable to set starting configuration").error(e);
|
||||
TraceEvent(SevError, "TestFailure").error(e).detail("Reason", "Unable to set starting configuration");
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1057,8 +1057,7 @@ ACTOR Future<Void> runTests( Reference<AsyncVar<Optional<struct ClusterControlle
|
|||
Void _ = wait( quietDatabase( cx, dbInfo, "Start") ||
|
||||
( databasePingDelay == 0.0 ? Never() : testDatabaseLiveness( cx, databasePingDelay, "QuietDatabaseStart", startDelay ) ) );
|
||||
} catch( Error& e ) {
|
||||
if( e.code() != error_code_actor_cancelled )
|
||||
TraceEvent("QuietDatabaseStartExternalError").error(e);
|
||||
TraceEvent("QuietDatabaseStartExternalError").error(e);
|
||||
throw;
|
||||
}
|
||||
}
|
||||
|
@ -1079,8 +1078,7 @@ ACTOR Future<Void> runTests( Reference<AsyncVar<Optional<struct ClusterControlle
|
|||
Void _ = wait( quietDatabase( cx, dbInfo, "End", 0, 2e6, 2e6 ) ||
|
||||
( databasePingDelay == 0.0 ? Never() : testDatabaseLiveness( cx, databasePingDelay, "QuietDatabaseEnd" ) ) );
|
||||
} catch( Error& e ) {
|
||||
if( e.code() != error_code_actor_cancelled )
|
||||
TraceEvent("QuietDatabaseEndExternalError").error(e);
|
||||
TraceEvent("QuietDatabaseEndExternalError").error(e);
|
||||
throw;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -406,11 +406,11 @@ void startRole(UID roleId, UID workerId, std::string as, std::map<std::string, s
|
|||
void endRole(UID id, std::string as, std::string reason, bool ok, Error e) {
|
||||
{
|
||||
TraceEvent ev("Role", id);
|
||||
if(e.code() != invalid_error_code)
|
||||
ev.error(e, true);
|
||||
ev.detail("Transition", "End")
|
||||
.detail("As", as)
|
||||
.detail("Reason", reason);
|
||||
if(e.code() != invalid_error_code)
|
||||
ev.error(e, true);
|
||||
|
||||
ev.trackLatest( (id.shortString() + ".Role").c_str() );
|
||||
}
|
||||
|
@ -419,11 +419,10 @@ void endRole(UID id, std::string as, std::string reason, bool ok, Error e) {
|
|||
std::string type = as + "Failed";
|
||||
|
||||
TraceEvent err(SevError, type.c_str(), id);
|
||||
err.detail("Reason", reason);
|
||||
|
||||
if(e.code() != invalid_error_code) {
|
||||
err.error(e, true);
|
||||
}
|
||||
err.detail("Reason", reason);
|
||||
}
|
||||
|
||||
latestEventCache.clear( id.shortString() );
|
||||
|
|
|
@ -156,7 +156,7 @@ struct BackupAndRestoreCorrectnessWorkload : TestWorkload {
|
|||
Void _ = wait(backupAgent->abortBackup(cx, tag.toString()));
|
||||
}
|
||||
catch (Error& e) {
|
||||
TraceEvent("BARW_DoBackupAbortBackupException", randomID).detail("Tag", printable(tag)).error(e);
|
||||
TraceEvent("BARW_DoBackupAbortBackupException", randomID).error(e).detail("Tag", printable(tag));
|
||||
if (e.code() != error_code_backup_unneeded)
|
||||
throw;
|
||||
}
|
||||
|
@ -171,7 +171,7 @@ struct BackupAndRestoreCorrectnessWorkload : TestWorkload {
|
|||
Void _ = wait(backupAgent->submitBackup(cx, StringRef(backupContainer), g_random->randomInt(0, 100), tag.toString(), backupRanges, stopDifferentialDelay ? false : true));
|
||||
}
|
||||
catch (Error& e) {
|
||||
TraceEvent("BARW_DoBackupSubmitBackupException", randomID).detail("Tag", printable(tag)).error(e);
|
||||
TraceEvent("BARW_DoBackupSubmitBackupException", randomID).error(e).detail("Tag", printable(tag));
|
||||
if (e.code() != error_code_backup_unneeded && e.code() != error_code_backup_duplicate)
|
||||
throw;
|
||||
}
|
||||
|
@ -244,7 +244,7 @@ struct BackupAndRestoreCorrectnessWorkload : TestWorkload {
|
|||
}
|
||||
}
|
||||
catch (Error& e) {
|
||||
TraceEvent("BARW_DoBackupDiscontinueBackupException", randomID).detail("Tag", printable(tag)).error(e);
|
||||
TraceEvent("BARW_DoBackupDiscontinueBackupException", randomID).error(e).detail("Tag", printable(tag));
|
||||
if (e.code() != error_code_backup_unneeded && e.code() != error_code_backup_duplicate)
|
||||
throw;
|
||||
}
|
||||
|
@ -359,7 +359,7 @@ struct BackupAndRestoreCorrectnessWorkload : TestWorkload {
|
|||
extraBackup = backupAgent.submitBackup(cx, LiteralStringRef("file://simfdb/backups/"), g_random->randomInt(0, 100), self->backupTag.toString(), self->backupRanges, true);
|
||||
}
|
||||
catch (Error& e) {
|
||||
TraceEvent("BARW_SubmitBackup2Exception", randomID).detail("BackupTag", printable(self->backupTag)).error(e);
|
||||
TraceEvent("BARW_SubmitBackup2Exception", randomID).error(e).detail("BackupTag", printable(self->backupTag));
|
||||
if (e.code() != error_code_backup_unneeded && e.code() != error_code_backup_duplicate)
|
||||
throw;
|
||||
}
|
||||
|
@ -423,7 +423,7 @@ struct BackupAndRestoreCorrectnessWorkload : TestWorkload {
|
|||
Void _ = wait(extraBackup);
|
||||
}
|
||||
catch (Error& e) {
|
||||
TraceEvent("BARW_ExtraBackupException", randomID).detail("BackupTag", printable(self->backupTag)).error(e);
|
||||
TraceEvent("BARW_ExtraBackupException", randomID).error(e).detail("BackupTag", printable(self->backupTag));
|
||||
if (e.code() != error_code_backup_unneeded && e.code() != error_code_backup_duplicate)
|
||||
throw;
|
||||
}
|
||||
|
|
|
@ -215,7 +215,7 @@ struct BackupToDBCorrectnessWorkload : TestWorkload {
|
|||
Void _ = wait(backupAgent->abortBackup(cx, tag));
|
||||
}
|
||||
catch (Error& e) {
|
||||
TraceEvent("BARW_DoBackupAbortBackupException", randomID).detail("Tag", printable(tag)).error(e);
|
||||
TraceEvent("BARW_DoBackupAbortBackupException", randomID).error(e).detail("Tag", printable(tag));
|
||||
if (e.code() != error_code_backup_unneeded)
|
||||
throw;
|
||||
}
|
||||
|
@ -250,7 +250,7 @@ struct BackupToDBCorrectnessWorkload : TestWorkload {
|
|||
}
|
||||
}
|
||||
catch (Error &e) {
|
||||
TraceEvent("BARW_DoBackupSubmitBackupException", randomID).detail("Tag", printable(tag)).error(e);
|
||||
TraceEvent("BARW_DoBackupSubmitBackupException", randomID).error(e).detail("Tag", printable(tag));
|
||||
if (e.code() != error_code_backup_unneeded && e.code() != error_code_backup_duplicate) {
|
||||
throw e;
|
||||
}
|
||||
|
@ -294,7 +294,7 @@ struct BackupToDBCorrectnessWorkload : TestWorkload {
|
|||
}
|
||||
}
|
||||
catch (Error& e) {
|
||||
TraceEvent("BARW_DoBackupDiscontinueBackupException", randomID).detail("Tag", printable(tag)).error(e);
|
||||
TraceEvent("BARW_DoBackupDiscontinueBackupException", randomID).error(e).detail("Tag", printable(tag));
|
||||
if (e.code() != error_code_backup_unneeded && e.code() != error_code_backup_duplicate)
|
||||
throw;
|
||||
}
|
||||
|
@ -480,7 +480,7 @@ struct BackupToDBCorrectnessWorkload : TestWorkload {
|
|||
extraBackup = backupAgent.submitBackup(self->extraDB, self->backupTag, self->backupRanges, true, self->extraPrefix, StringRef(), self->locked);
|
||||
}
|
||||
catch (Error& e) {
|
||||
TraceEvent("BARW_SubmitBackup2Exception", randomID).detail("BackupTag", printable(self->backupTag)).error(e);
|
||||
TraceEvent("BARW_SubmitBackup2Exception", randomID).error(e).detail("BackupTag", printable(self->backupTag));
|
||||
if (e.code() != error_code_backup_unneeded && e.code() != error_code_backup_duplicate)
|
||||
throw;
|
||||
}
|
||||
|
@ -520,7 +520,7 @@ struct BackupToDBCorrectnessWorkload : TestWorkload {
|
|||
Void _ = wait(restoreAgent.submitBackup(cx, self->restoreTag, restoreRange, true, StringRef(), self->backupPrefix, self->locked));
|
||||
}
|
||||
catch (Error& e) {
|
||||
TraceEvent("BARW_DoBackupSubmitBackupException", randomID).detail("Tag", printable(self->restoreTag)).error(e);
|
||||
TraceEvent("BARW_DoBackupSubmitBackupException", randomID).error(e).detail("Tag", printable(self->restoreTag));
|
||||
if (e.code() != error_code_backup_unneeded && e.code() != error_code_backup_duplicate)
|
||||
throw;
|
||||
}
|
||||
|
@ -536,7 +536,7 @@ struct BackupToDBCorrectnessWorkload : TestWorkload {
|
|||
Void _ = wait(extraBackup);
|
||||
}
|
||||
catch (Error& e) {
|
||||
TraceEvent("BARW_ExtraBackupException", randomID).detail("BackupTag", printable(self->backupTag)).error(e);
|
||||
TraceEvent("BARW_ExtraBackupException", randomID).error(e).detail("BackupTag", printable(self->backupTag));
|
||||
if (e.code() != error_code_backup_unneeded && e.code() != error_code_backup_duplicate)
|
||||
throw;
|
||||
}
|
||||
|
|
|
@ -121,7 +121,7 @@ struct BackupToDBUpgradeWorkload : TestWorkload {
|
|||
|
||||
TraceEvent("DRU_DoBackupInDifferentialMode").detail("Tag", printable(tag));
|
||||
} catch (Error &e) {
|
||||
TraceEvent("DRU_DoBackupSubmitBackupError").detail("Tag", printable(tag)).error(e);
|
||||
TraceEvent("DRU_DoBackupSubmitBackupError").error(e).detail("Tag", printable(tag));
|
||||
if (e.code() != error_code_backup_unneeded && e.code() != error_code_backup_duplicate) {
|
||||
throw e;
|
||||
}
|
||||
|
@ -441,7 +441,7 @@ struct BackupToDBUpgradeWorkload : TestWorkload {
|
|||
Void _ = wait(restoreAgent.submitBackup(cx, self->restoreTag, restoreRanges, true, StringRef(), self->backupPrefix));
|
||||
}
|
||||
catch (Error& e) {
|
||||
TraceEvent("DRU_RestoreSubmitBackupError").detail("Tag", printable(self->restoreTag)).error(e);
|
||||
TraceEvent("DRU_RestoreSubmitBackupError").error(e).detail("Tag", printable(self->restoreTag));
|
||||
if (e.code() != error_code_backup_unneeded && e.code() != error_code_backup_duplicate)
|
||||
throw;
|
||||
}
|
||||
|
|
|
@ -49,7 +49,7 @@ Future<bool> checkRangeSimpleValueSize( Database cx, T* workload, uint64_t begin
|
|||
Void _ = wait( success( first ) && success( last ) );
|
||||
return first.get().present() && last.get().present();
|
||||
} catch (Error& e) {
|
||||
TraceEvent("CheckRangeError").detail("Begin", begin).detail("End", end).error(e);
|
||||
TraceEvent("CheckRangeError").error(e).detail("Begin", begin).detail("End", end);
|
||||
Void _ = wait( tr.onError(e) );
|
||||
}
|
||||
}
|
||||
|
|
|
@ -160,7 +160,7 @@ struct CommitBugWorkload : TestWorkload
|
|||
else {
|
||||
TEST(true); //Commit conflict
|
||||
|
||||
TraceEvent("CommitBug2Error").detail("AttemptedNum", i+1).error(e);
|
||||
TraceEvent("CommitBug2Error").error(e).detail("AttemptedNum", i+1);
|
||||
Void _ = wait(tr.onError(e));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -228,7 +228,7 @@ struct ConsistencyCheckWorkload : TestWorkload
|
|||
{
|
||||
if(e.code() == error_code_attribute_not_found)
|
||||
{
|
||||
TraceEvent("ConsistencyCheck_StorageQueueSizeError").detail("Reason", "Could not read queue size").error(e);
|
||||
TraceEvent("ConsistencyCheck_StorageQueueSizeError").error(e).detail("Reason", "Could not read queue size");
|
||||
|
||||
//This error occurs if we have undesirable servers; in that case just report the undesirable servers error
|
||||
if(!hasUndesirableServers)
|
||||
|
@ -532,7 +532,7 @@ struct ConsistencyCheckWorkload : TestWorkload
|
|||
}
|
||||
catch(Error& e)
|
||||
{
|
||||
TraceEvent("ConsistencyCheck_ErrorFetchingMetrics").detail("Begin", printable(shard.begin)).detail("End", printable(shard.end)).error(e);
|
||||
TraceEvent("ConsistencyCheck_ErrorFetchingMetrics").error(e).detail("Begin", printable(shard.begin)).detail("End", printable(shard.end));
|
||||
estimatedBytes.clear();
|
||||
}
|
||||
|
||||
|
@ -843,8 +843,8 @@ struct ConsistencyCheckWorkload : TestWorkload
|
|||
//If the data is not available and we aren't relocating this shard
|
||||
else if(!isRelocating)
|
||||
{
|
||||
TraceEvent("ConsistencyCheck_StorageServerUnavailable").detail("StorageServer", storageServers[j]).detail("ShardBegin", printable(range.begin)).detail("ShardEnd", printable(range.end))
|
||||
.detail("Address", storageServerInterfaces[j].address()).detail("GetKeyValuesToken", storageServerInterfaces[j].getKeyValues.getEndpoint().token).suppressFor(1.0);
|
||||
TraceEvent("ConsistencyCheck_StorageServerUnavailable").suppressFor(1.0).detail("StorageServer", storageServers[j]).detail("ShardBegin", printable(range.begin)).detail("ShardEnd", printable(range.end))
|
||||
.detail("Address", storageServerInterfaces[j].address()).detail("GetKeyValuesToken", storageServerInterfaces[j].getKeyValues.getEndpoint().token);
|
||||
|
||||
//All shards should be available in quiscence
|
||||
if(self->performQuiescentChecks)
|
||||
|
@ -1107,7 +1107,7 @@ struct ConsistencyCheckWorkload : TestWorkload
|
|||
for(itr = workers.begin(); itr != workers.end(); ++itr) {
|
||||
ErrorOr<Standalone<VectorRef<UID>>> stores = wait(itr->first.diskStoreRequest.getReplyUnlessFailedFor(DiskStoreRequest(false), 2, 0));
|
||||
if(stores.isError()) {
|
||||
TraceEvent("ConsistencyCheck_GetDataStoreFailure").detail("Address", itr->first.address()).error(stores.getError());
|
||||
TraceEvent("ConsistencyCheck_GetDataStoreFailure").error(stores.getError()).detail("Address", itr->first.address());
|
||||
self->testFailure("Failed to get data stores");
|
||||
return false;
|
||||
}
|
||||
|
|
|
@ -130,8 +130,7 @@ struct CycleWorkload : TestWorkload {
|
|||
self->totalLatency += now() - tstart;
|
||||
}
|
||||
} catch (Error& e) {
|
||||
if (e.code() != error_code_actor_cancelled)
|
||||
TraceEvent(SevError, "CycleClient").error(e);
|
||||
TraceEvent(SevError, "CycleClient").error(e);
|
||||
throw;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -87,7 +87,7 @@ struct FastTriggeredWatchesWorkload : TestWorkload {
|
|||
//TraceEvent("FTWSetEnd").detail("Key", printable(key)).detail("Value", printable(value)).detail("Ver", tr.getCommittedVersion());
|
||||
return tr.getCommittedVersion();
|
||||
} catch( Error &e ) {
|
||||
//TraceEvent("FTWSetError").detail("Key", printable(key)).detail("Value", printable(value)).error(e);
|
||||
//TraceEvent("FTWSetError").error(e).detail("Key", printable(key)).detail("Value", printable(value));
|
||||
Void _ = wait( tr.onError(e) );
|
||||
}
|
||||
}
|
||||
|
@ -128,7 +128,7 @@ struct FastTriggeredWatchesWorkload : TestWorkload {
|
|||
watchEnd = now();
|
||||
first = false;
|
||||
} catch( Error &e ) {
|
||||
//TraceEvent("FTWWatchError").detail("Key", printable(setKey)).error(e);
|
||||
//TraceEvent("FTWWatchError").error(e).detail("Key", printable(setKey));
|
||||
Void _ = wait( tr.onError(e) );
|
||||
}
|
||||
}
|
||||
|
@ -174,4 +174,4 @@ struct FastTriggeredWatchesWorkload : TestWorkload {
|
|||
}
|
||||
};
|
||||
|
||||
WorkloadFactory<FastTriggeredWatchesWorkload> FastTriggeredWatchesWorkloadFactory("FastTriggeredWatches");
|
||||
WorkloadFactory<FastTriggeredWatchesWorkload> FastTriggeredWatchesWorkloadFactory("FastTriggeredWatches");
|
||||
|
|
|
@ -87,7 +87,7 @@ struct ExceptionContract {
|
|||
for (auto i : expected) {
|
||||
if (i.second == Always) {
|
||||
TraceEvent evt(SevError, func.c_str());
|
||||
evt.detail("Thrown", false).detail("Expected", "always").error(Error::fromUnvalidatedCode(i.first)).backtrace();
|
||||
evt.error(Error::fromUnvalidatedCode(i.first)).detail("Thrown", false).detail("Expected", "always").backtrace();
|
||||
if (augment)
|
||||
augment(evt);
|
||||
}
|
||||
|
|
|
@ -104,8 +104,7 @@ struct Increment : TestWorkload {
|
|||
self->totalLatency += now() - tstart;
|
||||
}
|
||||
} catch (Error& e) {
|
||||
if (e.code() != error_code_actor_cancelled)
|
||||
TraceEvent(SevError, "IncrementClient").error(e);
|
||||
TraceEvent(SevError, "IncrementClient").error(e);
|
||||
throw;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -169,7 +169,7 @@ struct PerformanceWorkload : TestWorkload {
|
|||
DistributedTestResults r = wait( runWorkload( cx, self->testers, self->dbName, spec ) );
|
||||
results = r;
|
||||
} catch(Error& e) {
|
||||
TraceEvent("PerformanceRunError").detail("Workload", printable(self->probeWorkload)).error(e, true);
|
||||
TraceEvent("PerformanceRunError").error(e, true).detail("Workload", printable(self->probeWorkload));
|
||||
break;
|
||||
}
|
||||
PerfMetric tpsMetric = self->getNamedMetric( "Transactions/sec", results.metrics );
|
||||
|
|
|
@ -75,7 +75,7 @@ struct StorefrontWorkload : TestWorkload {
|
|||
for(int c=0; c<clients.size(); c++)
|
||||
if( clients[c].isError() ) {
|
||||
errors++;
|
||||
TraceEvent(SevError, "TestFailure").detail("Reason", "ClientError").error(clients[c].getError());
|
||||
TraceEvent(SevError, "TestFailure").error(clients[c].getError()).detail("Reason", "ClientError");
|
||||
}
|
||||
clients.clear();
|
||||
return inventoryCheck( cx->clone(), this, !errors );
|
||||
|
@ -173,8 +173,7 @@ struct StorefrontWorkload : TestWorkload {
|
|||
self->totalLatency += now() - tstart;
|
||||
}
|
||||
} catch (Error& e) {
|
||||
if (e.code() != error_code_actor_cancelled)
|
||||
TraceEvent(SevError, "OrderingClient").error(e);
|
||||
TraceEvent(SevError, "OrderingClient").error(e);
|
||||
throw;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -100,9 +100,9 @@ struct UnitTestWorkload : TestWorkload {
|
|||
|
||||
auto test = *t;
|
||||
TraceEvent(result.code() != error_code_success ? SevError : SevInfo, "UnitTest")
|
||||
.error(result, true)
|
||||
.detail("Name", test->name)
|
||||
.detail("File", test->file).detail("Line", test->line)
|
||||
.error(result, true)
|
||||
.detail("WallTime", wallTime)
|
||||
.detail("FlowTime", simTime);
|
||||
}
|
||||
|
|
|
@ -290,7 +290,7 @@ struct VersionStampWorkload : TestWorkload {
|
|||
tr = ReadYourWritesTransaction(cx_is_primary ? cx : extraDB);
|
||||
break;
|
||||
} else if (err.code() == error_code_commit_unknown_result) {
|
||||
//TraceEvent("VST_CommitUnknownResult").detail("Key", printable(key)).detail("VsKey", printable(versionStampKey)).error(e);
|
||||
//TraceEvent("VST_CommitUnknownResult").error(e).detail("Key", printable(key)).detail("VsKey", printable(versionStampKey));
|
||||
loop {
|
||||
state ReadYourWritesTransaction cur_tr(cx_is_primary ? cx : extraDB);
|
||||
cur_tr.setOption(FDBTransactionOptions::LOCK_AWARE);
|
||||
|
@ -326,7 +326,7 @@ struct VersionStampWorkload : TestWorkload {
|
|||
}
|
||||
|
||||
if (error) {
|
||||
TraceEvent("VST_CommitFailed").detail("Key", printable(key)).detail("VsKey", printable(versionStampKey)).error(err);
|
||||
TraceEvent("VST_CommitFailed").error(err).detail("Key", printable(key)).detail("VsKey", printable(versionStampKey));
|
||||
Void _ = wait(tr.onError(err));
|
||||
continue;
|
||||
}
|
||||
|
|
|
@ -118,7 +118,7 @@ struct WatchesWorkload : TestWorkload {
|
|||
extraLoc += 1000;
|
||||
//TraceEvent("WatcherInitialSetup").detail("Watch", printable(watchKey)).detail("Ver", tr.getCommittedVersion());
|
||||
} catch( Error &e ) {
|
||||
//TraceEvent("WatcherInitialSetupError").detail("ExtraLoc", extraLoc).error(e);
|
||||
//TraceEvent("WatcherInitialSetupError").error(e).detail("ExtraLoc", extraLoc);
|
||||
Void _ = wait( tr.onError(e) );
|
||||
}
|
||||
}
|
||||
|
|
|
@ -40,7 +40,7 @@ extern void flushTraceFileVoid();
|
|||
Error Error::fromUnvalidatedCode(int code) {
|
||||
if (code < 0 || code > 30000) {
|
||||
Error e = Error::fromCode(error_code_unknown_error);
|
||||
TraceEvent(SevWarn, "ConvertedUnvalidatedErrorCode").detail("OriginalCode", code).error(e);
|
||||
TraceEvent(SevWarn, "ConvertedUnvalidatedErrorCode").error(e).detail("OriginalCode", code);
|
||||
return e;
|
||||
}
|
||||
else
|
||||
|
@ -116,4 +116,4 @@ void ErrorCodeTable::addCode(int code, const char *name, const char *description
|
|||
|
||||
bool isAssertDisabled(int line) {
|
||||
return FLOW_KNOBS->DISABLE_ASSERTS == -1 || FLOW_KNOBS->DISABLE_ASSERTS == line;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -240,7 +240,7 @@ public:
|
|||
try {
|
||||
if (error) {
|
||||
// Log the error...
|
||||
TraceEvent(SevWarn, errContext, errID).detail("Message", error.value()).suppressFor(1.0);
|
||||
TraceEvent(SevWarn, errContext, errID).suppressFor(1.0).detail("Message", error.value());
|
||||
p.sendError( connection_failed() );
|
||||
} else
|
||||
p.send( Void() );
|
||||
|
@ -411,15 +411,15 @@ private:
|
|||
boost::system::error_code error;
|
||||
socket.close(error);
|
||||
if (error)
|
||||
TraceEvent(SevWarn, "N2_CloseError", id).detail("Message", error.value()).suppressFor(1.0);
|
||||
TraceEvent(SevWarn, "N2_CloseError", id).suppressFor(1.0).detail("Message", error.value());
|
||||
}
|
||||
|
||||
void onReadError( const boost::system::error_code& error ) {
|
||||
TraceEvent(SevWarn, "N2_ReadError", id).detail("Message", error.value()).suppressFor(1.0);
|
||||
TraceEvent(SevWarn, "N2_ReadError", id).suppressFor(1.0).detail("Message", error.value());
|
||||
closeSocket();
|
||||
}
|
||||
void onWriteError( const boost::system::error_code& error ) {
|
||||
TraceEvent(SevWarn, "N2_WriteError", id).detail("Message", error.value()).suppressFor(1.0);
|
||||
TraceEvent(SevWarn, "N2_WriteError", id).suppressFor(1.0).detail("Message", error.value());
|
||||
closeSocket();
|
||||
}
|
||||
};
|
||||
|
@ -900,11 +900,11 @@ Reference<IListener> Net2::listen( NetworkAddress localAddr ) {
|
|||
x = invalid_local_address();
|
||||
else
|
||||
x = bind_failed();
|
||||
TraceEvent("Net2ListenError").detail("Message", e.what()).error(x);
|
||||
TraceEvent("Net2ListenError").error(x).detail("Message", e.what());
|
||||
throw x;
|
||||
} catch (std::exception const& e) {
|
||||
Error x = unknown_error();
|
||||
TraceEvent("Net2ListenError").detail("Message", e.what()).error(x);
|
||||
TraceEvent("Net2ListenError").error(x).detail("Message", e.what());
|
||||
throw x;
|
||||
} catch (...) {
|
||||
Error x = unknown_error();
|
||||
|
|
|
@ -1683,7 +1683,7 @@ void atomicReplace( std::string const& path, std::string const& content, bool te
|
|||
INJECT_FAULT( io_error, "atomicReplace" );
|
||||
}
|
||||
catch(Error &e) {
|
||||
TraceEvent(SevWarn, "AtomicReplace").detail("Path", path).error(e).GetLastError();
|
||||
TraceEvent(SevWarn, "AtomicReplace").error(e).detail("Path", path).GetLastError();
|
||||
if (f) fclose(f);
|
||||
throw;
|
||||
}
|
||||
|
|
188
flow/Trace.cpp
188
flow/Trace.cpp
|
@ -110,7 +110,6 @@ struct SuppressionMap {
|
|||
|
||||
TraceBatch g_traceBatch;
|
||||
trace_clock_t g_trace_clock = TRACE_CLOCK_NOW;
|
||||
std::set<StringRef> suppress;
|
||||
IRandom* trace_random = NULL;
|
||||
|
||||
LatestEventCache latestEventCache;
|
||||
|
@ -118,6 +117,7 @@ SuppressionMap suppressedEvents;
|
|||
|
||||
static TransientThresholdMetricSample<Standalone<StringRef>> *traceEventThrottlerCache;
|
||||
static const char *TRACE_EVENT_THROTTLE_STARTING_TYPE = "TraceEventThrottle_";
|
||||
static const char *TRACE_EVENT_INVALID_SUPPRESSION = "InvalidSuppression_";
|
||||
static int TRACE_LOG_MAX_PREOPEN_BUFFER = 1000000;
|
||||
static int TRACE_EVENT_MAX_SIZE = 4000;
|
||||
|
||||
|
@ -534,16 +534,6 @@ void openTraceFile(const NetworkAddress& na, uint64_t rollsize, uint64_t maxLogs
|
|||
std::string baseName = format("%s.%03d.%03d.%03d.%03d.%d", baseOfBase.c_str(), (na.ip>>24)&0xff, (na.ip>>16)&0xff, (na.ip>>8)&0xff, na.ip&0xff, na.port);
|
||||
g_traceLog.open( directory, baseName, logGroup, format("%lld", time(NULL)), rollsize, maxLogsSize, !g_network->isSimulated() ? na : Optional<NetworkAddress>());
|
||||
|
||||
// FIXME
|
||||
suppress.insert( LiteralStringRef( "TLogCommitDurable" ) );
|
||||
suppress.insert( LiteralStringRef( "StorageServerUpdate" ) );
|
||||
suppress.insert( LiteralStringRef( "TLogCommit" ) );
|
||||
suppress.insert( LiteralStringRef( "StorageServerDurable" ) );
|
||||
suppress.insert( LiteralStringRef( "ForgotVersionsBefore" ) );
|
||||
suppress.insert( LiteralStringRef( "FDData" ) );
|
||||
suppress.insert( LiteralStringRef( "FailureDetectionPoll" ) );
|
||||
suppress.insert( LiteralStringRef( "MasterProxyRate" ) );
|
||||
|
||||
uncancellable(recurring(&flushTraceFile, FLOW_KNOBS->TRACE_FLUSH_INTERVAL, TaskFlushTrace));
|
||||
g_traceBatch.dump();
|
||||
}
|
||||
|
@ -560,59 +550,17 @@ bool traceFileIsOpen() {
|
|||
return g_traceLog.isOpen();
|
||||
}
|
||||
|
||||
bool TraceEvent::isEnabled( const char* type, Severity severity ) {
|
||||
//if (!g_traceLog.isOpen()) return false;
|
||||
if(g_network && severity < FLOW_KNOBS->MIN_TRACE_SEVERITY) return false;
|
||||
StringRef s( (const uint8_t*)type, strlen(type) );
|
||||
return !suppress.count(s);
|
||||
TraceEvent::TraceEvent( const char* type, UID id ) : id(id), type(type), severity(SevInfo), initialized(false), enabled(true) {}
|
||||
TraceEvent::TraceEvent( Severity severity, const char* type, UID id ) : id(id), type(type), severity(severity), initialized(false), enabled(true) {}
|
||||
TraceEvent::TraceEvent( TraceInterval& interval, UID id ) : id(id), type(interval.type), severity(interval.severity), initialized(false), enabled(true) {
|
||||
init(interval);
|
||||
}
|
||||
TraceEvent::TraceEvent( Severity severity, TraceInterval& interval, UID id ) : id(id), type(interval.type), severity(severity), initialized(false), enabled(true) {
|
||||
init(interval);
|
||||
}
|
||||
|
||||
TraceEvent::TraceEvent( const char* type, UID id ) : id(id) {
|
||||
init(SevInfo, type);
|
||||
detail("ID", id);
|
||||
}
|
||||
|
||||
TraceEvent::TraceEvent( Severity severity, const char* type, UID id ) : id(id) {
|
||||
init(severity, type);
|
||||
detail("ID", id);
|
||||
}
|
||||
|
||||
TraceEvent::TraceEvent(const char* type, const StringRef& zoneId) {
|
||||
id = UID(hashlittle(zoneId.begin(), zoneId.size(), 0), 0);
|
||||
init(SevInfo, type);
|
||||
detailext("ID", zoneId);
|
||||
}
|
||||
|
||||
TraceEvent::TraceEvent(Severity severity, const char* type, const StringRef& zoneId) {
|
||||
id = UID(hashlittle(zoneId.begin(), zoneId.size(), 0), 0);
|
||||
init(severity, type);
|
||||
detailext("ID", zoneId);
|
||||
}
|
||||
|
||||
TraceEvent::TraceEvent(const char* type, const Optional<Standalone<StringRef>>& zoneId) {
|
||||
id = zoneId.present() ? UID(hashlittle(zoneId.get().begin(), zoneId.get().size(), 0), 0) : UID(-1LL,0);
|
||||
init(SevInfo, type);
|
||||
detailext("ID", zoneId);
|
||||
}
|
||||
|
||||
TraceEvent::TraceEvent(Severity severity, const char* type, const Optional<Standalone<StringRef>>& zoneId) {
|
||||
id = zoneId.present() ? UID(hashlittle(zoneId.get().begin(), zoneId.get().size(), 0), 0) : UID(-1LL, 0);
|
||||
init(severity, type);
|
||||
detailext("ID", zoneId);
|
||||
}
|
||||
|
||||
TraceEvent::TraceEvent( TraceInterval& interval, UID id ) : id(id) {
|
||||
init(interval.severity, interval);
|
||||
detail("ID", id);
|
||||
}
|
||||
|
||||
TraceEvent::TraceEvent( Severity severity, TraceInterval& interval, UID id ) : id(id) {
|
||||
init(severity, interval);
|
||||
detail("ID", id);
|
||||
}
|
||||
|
||||
bool TraceEvent::init( Severity severity, TraceInterval& interval ) {
|
||||
bool result = init( severity, interval.type );
|
||||
bool TraceEvent::init( TraceInterval& interval ) {
|
||||
bool result = init();
|
||||
switch (interval.count++) {
|
||||
case 0: { detail("BeginPair", interval.pairID); break; }
|
||||
case 1: { detail("EndPair", interval.pairID); break; }
|
||||
|
@ -621,13 +569,14 @@ bool TraceEvent::init( Severity severity, TraceInterval& interval ) {
|
|||
return result;
|
||||
}
|
||||
|
||||
bool TraceEvent::init( Severity severity, const char* type ) {
|
||||
bool TraceEvent::init() {
|
||||
if(initialized) {
|
||||
return enabled;
|
||||
}
|
||||
initialized = true;
|
||||
|
||||
ASSERT(*type != '\0');
|
||||
|
||||
this->type = type;
|
||||
this->severity = severity;
|
||||
|
||||
enabled = isEnabled(type, severity);
|
||||
enabled = enabled && ( !g_network || severity >= FLOW_KNOBS->MIN_TRACE_SEVERITY );
|
||||
|
||||
// Backstop to throttle very spammy trace events
|
||||
if (enabled && g_network && !g_network->isSimulated() && severity > SevDebug && isNetworkThread()) {
|
||||
|
@ -657,6 +606,10 @@ bool TraceEvent::init( Severity severity, const char* type ) {
|
|||
time = timer();
|
||||
}
|
||||
|
||||
if(err.isValid() && err.isInjectedFault() && severity == SevError) {
|
||||
severity = SevWarnAlways;
|
||||
}
|
||||
|
||||
detail("Severity", severity);
|
||||
detailf("Time", "%.6f", time);
|
||||
detail("Type", type);
|
||||
|
@ -664,6 +617,15 @@ bool TraceEvent::init( Severity severity, const char* type ) {
|
|||
NetworkAddress local = g_network->getLocalAddress();
|
||||
detailf("Machine", "%d.%d.%d.%d:%d", (local.ip>>24)&0xff, (local.ip>>16)&0xff, (local.ip>>8)&0xff, local.ip&0xff, local.port);
|
||||
}
|
||||
detail("ID", id);
|
||||
if(err.isValid()) {
|
||||
if (err.isInjectedFault()) {
|
||||
detail("ErrorIsInjectedFault", true);
|
||||
}
|
||||
detail("Error", err.name());
|
||||
detail("ErrorDescription", err.what());
|
||||
detail("ErrorCode", err.code());
|
||||
}
|
||||
} else {
|
||||
tmpEventMetric = nullptr;
|
||||
}
|
||||
|
@ -672,24 +634,31 @@ bool TraceEvent::init( Severity severity, const char* type ) {
|
|||
}
|
||||
|
||||
TraceEvent& TraceEvent::error(class Error const& error, bool includeCancelled) {
|
||||
if (enabled) {
|
||||
if (error.code() == error_code_actor_cancelled && !includeCancelled) {
|
||||
// Suppress the entire message
|
||||
enabled = false;
|
||||
} else {
|
||||
if (error.isInjectedFault()) {
|
||||
detail("ErrorIsInjectedFault", true);
|
||||
if (severity == SevError) severity = SevWarnAlways;
|
||||
if(enabled) {
|
||||
if (error.code() != error_code_actor_cancelled || includeCancelled) {
|
||||
err = error;
|
||||
if (initialized) {
|
||||
if (error.isInjectedFault()) {
|
||||
detail("ErrorIsInjectedFault", true);
|
||||
if(severity == SevError) severity = SevWarnAlways;
|
||||
}
|
||||
detail("Error", error.name());
|
||||
detail("ErrorDescription", error.what());
|
||||
detail("ErrorCode", error.code());
|
||||
}
|
||||
} else {
|
||||
if (initialized) {
|
||||
TraceEvent(g_network && g_network->isSimulated() ? SevError : SevWarnAlways, std::string(TRACE_EVENT_INVALID_SUPPRESSION).append(type).c_str()).suppressFor(5);
|
||||
} else {
|
||||
enabled = false;
|
||||
}
|
||||
detail("Error", error.name());
|
||||
detail("ErrorDescription", error.what());
|
||||
detail("ErrorCode", error.code());
|
||||
}
|
||||
}
|
||||
return *this;
|
||||
}
|
||||
|
||||
TraceEvent& TraceEvent::detailImpl( std::string&& key, std::string&& value, bool writeEventMetricField) {
|
||||
init();
|
||||
if (enabled) {
|
||||
if( value.size() > 495 ) {
|
||||
value = value.substr(0, 495) + "...";
|
||||
|
@ -713,36 +682,43 @@ TraceEvent& TraceEvent::detail( std::string key, std::string value ) {
|
|||
return detailImpl(std::move(key), std::move(value));
|
||||
}
|
||||
TraceEvent& TraceEvent::detail( std::string key, double value ) {
|
||||
init();
|
||||
if(enabled)
|
||||
tmpEventMetric->setField(key.c_str(), value);
|
||||
return detailfNoMetric( std::move(key), "%g", value );
|
||||
}
|
||||
TraceEvent& TraceEvent::detail( std::string key, int value ) {
|
||||
init();
|
||||
if(enabled)
|
||||
tmpEventMetric->setField(key.c_str(), (int64_t)value);
|
||||
return detailfNoMetric( std::move(key), "%d", value );
|
||||
}
|
||||
TraceEvent& TraceEvent::detail( std::string key, unsigned value ) {
|
||||
init();
|
||||
if(enabled)
|
||||
tmpEventMetric->setField(key.c_str(), (int64_t)value);
|
||||
return detailfNoMetric( std::move(key), "%u", value );
|
||||
}
|
||||
TraceEvent& TraceEvent::detail( std::string key, long int value ) {
|
||||
init();
|
||||
if(enabled)
|
||||
tmpEventMetric->setField(key.c_str(), (int64_t)value);
|
||||
return detailfNoMetric( std::move(key), "%ld", value );
|
||||
}
|
||||
TraceEvent& TraceEvent::detail( std::string key, long unsigned int value ) {
|
||||
init();
|
||||
if(enabled)
|
||||
tmpEventMetric->setField(key.c_str(), (int64_t)value);
|
||||
return detailfNoMetric( std::move(key), "%lu", value );
|
||||
}
|
||||
TraceEvent& TraceEvent::detail( std::string key, long long int value ) {
|
||||
init();
|
||||
if(enabled)
|
||||
tmpEventMetric->setField(key.c_str(), (int64_t)value);
|
||||
return detailfNoMetric( std::move(key), "%lld", value );
|
||||
}
|
||||
TraceEvent& TraceEvent::detail( std::string key, long long unsigned int value ) {
|
||||
init();
|
||||
if(enabled)
|
||||
tmpEventMetric->setField(key.c_str(), (int64_t)value);
|
||||
return detailfNoMetric( std::move(key), "%llu", value );
|
||||
|
@ -793,33 +769,48 @@ TraceEvent& TraceEvent::trackLatest( const char *trackingKey ){
|
|||
}
|
||||
|
||||
TraceEvent& TraceEvent::sample( double sampleRate, bool logSampleRate ) {
|
||||
if(!g_random) {
|
||||
sampleRate = 1.0;
|
||||
}
|
||||
else {
|
||||
enabled = enabled && g_random->random01() < sampleRate;
|
||||
}
|
||||
if(enabled) {
|
||||
if(initialized) {
|
||||
TraceEvent(g_network && g_network->isSimulated() ? SevError : SevWarnAlways, std::string(TRACE_EVENT_INVALID_SUPPRESSION).append(type).c_str()).suppressFor(5);
|
||||
return *this;
|
||||
}
|
||||
|
||||
if(enabled && logSampleRate) {
|
||||
detail("SampleRate", sampleRate);
|
||||
if(!g_random) {
|
||||
sampleRate = 1.0;
|
||||
}
|
||||
else {
|
||||
enabled = enabled && g_random->random01() < sampleRate;
|
||||
}
|
||||
|
||||
if(enabled && logSampleRate) {
|
||||
detail("SampleRate", sampleRate);
|
||||
}
|
||||
}
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
TraceEvent& TraceEvent::suppressFor( double duration, bool logSuppressedEventCount ) {
|
||||
if(g_network) {
|
||||
if(isNetworkThread()) {
|
||||
int64_t suppressedEventCount = suppressedEvents.checkAndInsertSuppression(type, duration);
|
||||
enabled = enabled && suppressedEventCount >= 0;
|
||||
if(enabled && logSuppressedEventCount) {
|
||||
detail("SuppressedEventCount", suppressedEventCount);
|
||||
if(enabled) {
|
||||
if(initialized) {
|
||||
TraceEvent(g_network && g_network->isSimulated() ? SevError : SevWarnAlways, std::string(TRACE_EVENT_INVALID_SUPPRESSION).append(type).c_str()).suppressFor(5);
|
||||
return *this;
|
||||
}
|
||||
|
||||
if(g_network) {
|
||||
if(isNetworkThread()) {
|
||||
int64_t suppressedEventCount = suppressedEvents.checkAndInsertSuppression(type, duration);
|
||||
enabled = enabled && suppressedEventCount >= 0;
|
||||
if(enabled && logSuppressedEventCount) {
|
||||
detail("SuppressedEventCount", suppressedEventCount);
|
||||
}
|
||||
}
|
||||
else {
|
||||
TraceEvent(SevError, "SuppressionFromNonNetworkThread");
|
||||
detail("__InvalidSuppression__", ""); // Choosing a detail name that is unlikely to collide with other names
|
||||
}
|
||||
}
|
||||
else {
|
||||
TraceEvent(SevError, "SuppressionFromNonNetworkThread");
|
||||
detail("__InvalidSuppression__", ""); // Choosing a detail name that is unlikely to collide with other names
|
||||
}
|
||||
init(); //we do not want any future calls on this trace event to disable it, because we have already counted it towards our suppression budget
|
||||
}
|
||||
|
||||
return *this;
|
||||
|
@ -842,11 +833,12 @@ unsigned long TraceEvent::CountEventsLoggedAt(Severity sev) {
|
|||
}
|
||||
|
||||
TraceEvent& TraceEvent::backtrace(const std::string& prefix) {
|
||||
if (this->severity == SevError) return *this; // We'll backtrace this later in ~TraceEvent
|
||||
if (this->severity == SevError || !enabled) return *this; // We'll backtrace this later in ~TraceEvent
|
||||
return detail(prefix + "Backtrace", platform::get_backtrace());
|
||||
}
|
||||
|
||||
TraceEvent::~TraceEvent() {
|
||||
init();
|
||||
try {
|
||||
if (enabled) {
|
||||
if (this->severity == SevError) {
|
||||
|
|
15
flow/Trace.h
15
flow/Trace.h
|
@ -139,15 +139,11 @@ struct TraceEvent {
|
|||
TraceEvent( Severity, const char* type, UID id = UID() );
|
||||
TraceEvent( struct TraceInterval&, UID id = UID() );
|
||||
TraceEvent( Severity severity, struct TraceInterval& interval, UID id = UID() );
|
||||
TraceEvent(const char* type, const StringRef& id); // Assumes SevInfo severity
|
||||
TraceEvent(Severity, const char* type, const StringRef& id);
|
||||
TraceEvent(const char* type, const Optional<Standalone<StringRef>>& id); // Assumes SevInfo severity
|
||||
TraceEvent(Severity, const char* type, const Optional<Standalone<StringRef>>& id);
|
||||
|
||||
static bool isEnabled( const char* type, Severity = SevMax );
|
||||
static void setNetworkThread();
|
||||
static bool isNetworkThread();
|
||||
|
||||
//Must be called directly after constructing the trace event
|
||||
TraceEvent& error(const class Error& e, bool includeCancelled=false);
|
||||
|
||||
TraceEvent& detail( std::string key, std::string value );
|
||||
|
@ -172,6 +168,8 @@ public:
|
|||
TraceEvent& backtrace(const std::string& prefix = "");
|
||||
TraceEvent& trackLatest( const char* trackingKey );
|
||||
TraceEvent& sample( double sampleRate, bool logSampleRate=true );
|
||||
|
||||
//Cannot call other functions which could disable the trace event afterwords
|
||||
TraceEvent& suppressFor( double duration, bool logSuppressedEventCount=true );
|
||||
|
||||
TraceEvent& GetLastError();
|
||||
|
@ -184,19 +182,20 @@ public:
|
|||
DynamicEventMetric *tmpEventMetric; // This just just a place to store fields
|
||||
|
||||
private:
|
||||
bool initialized;
|
||||
bool enabled;
|
||||
std::string trackingKey;
|
||||
TraceEventFields fields;
|
||||
int length;
|
||||
Severity severity;
|
||||
const char *type;
|
||||
UID id;
|
||||
Error err;
|
||||
|
||||
static unsigned long eventCounts[5];
|
||||
static thread_local bool networkThread;
|
||||
|
||||
bool init( Severity, const char* type );
|
||||
bool init( Severity, struct TraceInterval& );
|
||||
bool init();
|
||||
bool init( struct TraceInterval& );
|
||||
};
|
||||
|
||||
struct ITraceLogWriter {
|
||||
|
|
|
@ -41,7 +41,7 @@ Future<T> traceAfter(Future<T> what, const char* type, const char* key, X value,
|
|||
TraceEvent(type).detail(key, value);
|
||||
return val;
|
||||
} catch( Error &e ) {
|
||||
if(traceErrors) TraceEvent(type).detail(key, value).error(e,true);
|
||||
if(traceErrors) TraceEvent(type).error(e,true).detail(key, value);
|
||||
throw;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -54,7 +54,6 @@ enum {
|
|||
TaskProxyCommit = 8540,
|
||||
TaskTLogConfirmRunningReply = 8530,
|
||||
TaskTLogConfirmRunning = 8520,
|
||||
TaskProxyGetKeyServersLocations = 8515,
|
||||
TaskProxyGRVTimer = 8510,
|
||||
TaskProxyGetConsistentReadVersion = 8500,
|
||||
TaskDefaultPromiseEndpoint = 8000,
|
||||
|
|
|
@ -204,7 +204,7 @@ struct _IncludeVersion {
|
|||
ar >> v;
|
||||
if (v < minValidProtocolVersion) {
|
||||
auto err = incompatible_protocol_version();
|
||||
TraceEvent(SevError, "InvalidSerializationVersion").detailf("Version", "%llx", v).error(err);
|
||||
TraceEvent(SevError, "InvalidSerializationVersion").error(err).detailf("Version", "%llx", v);
|
||||
throw err;
|
||||
}
|
||||
if (v > currentProtocolVersion) {
|
||||
|
@ -212,7 +212,7 @@ struct _IncludeVersion {
|
|||
// particular data structures (e.g. to support mismatches between client and server versions when the client
|
||||
// must deserialize zookeeper and database structures)
|
||||
auto err = incompatible_protocol_version();
|
||||
TraceEvent(SevError, "FutureProtocolVersion").detailf("Version", "%llx", v).error(err);
|
||||
TraceEvent(SevError, "FutureProtocolVersion").error(err).detailf("Version", "%llx", v);
|
||||
throw err;
|
||||
}
|
||||
ar.setProtocolVersion(v);
|
||||
|
|
|
@ -32,7 +32,7 @@
|
|||
|
||||
<Wix xmlns='http://schemas.microsoft.com/wix/2006/wi'>
|
||||
<Product Name='$(var.Title)'
|
||||
Id='{1D975891-59AA-4F61-B6B4-C5DD971F2292}'
|
||||
Id='{B6805A9A-CACA-4C08-9BE2-1EFAB91C9117}'
|
||||
UpgradeCode='{A95EA002-686E-4164-8356-C715B7F8B1C8}'
|
||||
Version='$(var.Version)'
|
||||
Manufacturer='$(var.Manufacturer)'
|
||||
|
|
Loading…
Reference in New Issue