summaryrefslogtreecommitdiff
path: root/src/mongo
diff options
context:
space:
mode:
authorMark Benvenuto <mark.benvenuto@mongodb.com>2018-09-14 13:24:39 -0400
committerMark Benvenuto <mark.benvenuto@mongodb.com>2018-09-14 13:24:39 -0400
commit5603a0812eb64c8009a514a3c59182f7f7134b9e (patch)
treec8feed84f4e45486739941763525139a942abee4 /src/mongo
parent0b5a31fe040168e9cbe3243b80ed2f40e1099e58 (diff)
downloadmongo-5603a0812eb64c8009a514a3c59182f7f7134b9e.tar.gz
SERVER-34882 Support creating instances with all required fields in IDL
Diffstat (limited to 'src/mongo')
-rw-r--r--src/mongo/db/catalog/health_log.idl4
-rw-r--r--src/mongo/db/pipeline/document_source_change_stream_test.cpp36
-rw-r--r--src/mongo/db/pipeline/document_source_change_stream_transform.cpp6
-rw-r--r--src/mongo/db/repl/applier_helpers.cpp6
-rw-r--r--src/mongo/db/repl/apply_ops_test.cpp6
-rw-r--r--src/mongo/db/repl/dbcheck.cpp2
-rw-r--r--src/mongo/db/repl/oplog_entry.cpp10
-rw-r--r--src/mongo/db/repl/oplog_entry.idl2
-rw-r--r--src/mongo/db/repl/oplog_test.cpp2
-rw-r--r--src/mongo/db/repl/rollback_impl.cpp4
-rw-r--r--src/mongo/db/repl/rs_rollback.cpp4
-rw-r--r--src/mongo/db/repl/session_update_tracker.cpp2
-rw-r--r--src/mongo/db/repl/sync_tail.cpp8
-rw-r--r--src/mongo/db/repl/sync_tail_test.cpp2
-rw-r--r--src/mongo/db/s/session_catalog_migration_destination.cpp2
-rw-r--r--src/mongo/db/s/session_catalog_migration_source.cpp2
-rw-r--r--src/mongo/dbtests/storage_timestamp_tests.cpp2
-rw-r--r--src/mongo/idl/unittest.idl4
18 files changed, 54 insertions, 50 deletions
diff --git a/src/mongo/db/catalog/health_log.idl b/src/mongo/db/catalog/health_log.idl
index f38bc85a72a..945b7960523 100644
--- a/src/mongo/db/catalog/health_log.idl
+++ b/src/mongo/db/catalog/health_log.idl
@@ -50,7 +50,9 @@ structs:
HealthLogEntry:
description: "An entry in system.local.healthlog."
fields:
- namespace: namespacestring
+ namespace:
+ cpp_name: nss
+ type: namespacestring
timestamp: date
severity: Severity
msg: string
diff --git a/src/mongo/db/pipeline/document_source_change_stream_test.cpp b/src/mongo/db/pipeline/document_source_change_stream_test.cpp
index c8a703726cb..761fdfbd1c3 100644
--- a/src/mongo/db/pipeline/document_source_change_stream_test.cpp
+++ b/src/mongo/db/pipeline/document_source_change_stream_test.cpp
@@ -453,12 +453,12 @@ TEST_F(ChangeStreamStageTest, TransformInsertDocKeyXAndId) {
};
checkTransformation(insert, expectedInsert, {{"x"}, {"_id"}});
bool fromMigrate = false; // also check actual "fromMigrate: false" not filtered
- auto insert2 = makeOplogEntry(insert.getOpType(), // op type
- insert.getNamespace(), // namespace
- insert.getObject(), // o
- insert.getUuid(), // uuid
- fromMigrate, // fromMigrate
- insert.getObject2()); // o2
+ auto insert2 = makeOplogEntry(insert.getOpType(), // op type
+ insert.getNss(), // namespace
+ insert.getObject(), // o
+ insert.getUuid(), // uuid
+ fromMigrate, // fromMigrate
+ insert.getObject2()); // o2
checkTransformation(insert2, expectedInsert, {{"x"}, {"_id"}});
}
@@ -628,12 +628,12 @@ TEST_F(ChangeStreamStageTest, TransformDelete) {
checkTransformation(deleteEntry, expectedDelete);
bool fromMigrate = false; // also check actual "fromMigrate: false" not filtered
- auto deleteEntry2 = makeOplogEntry(deleteEntry.getOpType(), // op type
- deleteEntry.getNamespace(), // namespace
- deleteEntry.getObject(), // o
- deleteEntry.getUuid(), // uuid
- fromMigrate, // fromMigrate
- deleteEntry.getObject2()); // o2
+ auto deleteEntry2 = makeOplogEntry(deleteEntry.getOpType(), // op type
+ deleteEntry.getNss(), // namespace
+ deleteEntry.getObject(), // o
+ deleteEntry.getUuid(), // uuid
+ fromMigrate, // fromMigrate
+ deleteEntry.getObject2()); // o2
checkTransformation(deleteEntry2, expectedDelete);
}
@@ -1400,12 +1400,12 @@ TEST_F(ChangeStreamStageDBTest, TransformDelete) {
checkTransformation(deleteEntry, expectedDelete);
bool fromMigrate = false; // also check actual "fromMigrate: false" not filtered
- auto deleteEntry2 = makeOplogEntry(deleteEntry.getOpType(), // op type
- deleteEntry.getNamespace(), // namespace
- deleteEntry.getObject(), // o
- deleteEntry.getUuid(), // uuid
- fromMigrate, // fromMigrate
- deleteEntry.getObject2()); // o2
+ auto deleteEntry2 = makeOplogEntry(deleteEntry.getOpType(), // op type
+ deleteEntry.getNss(), // namespace
+ deleteEntry.getObject(), // o
+ deleteEntry.getUuid(), // uuid
+ fromMigrate, // fromMigrate
+ deleteEntry.getObject2()); // o2
checkTransformation(deleteEntry2, expectedDelete);
}
diff --git a/src/mongo/db/pipeline/document_source_change_stream_transform.cpp b/src/mongo/db/pipeline/document_source_change_stream_transform.cpp
index a7f6e01d235..9e49dedcd1f 100644
--- a/src/mongo/db/pipeline/document_source_change_stream_transform.cpp
+++ b/src/mongo/db/pipeline/document_source_change_stream_transform.cpp
@@ -211,8 +211,8 @@ Document DocumentSourceChangeStreamTransform::applyTransformation(const Document
BSONType::String);
string op = input[repl::OplogEntry::kOpTypeFieldName].getString();
Value ts = input[repl::OplogEntry::kTimestampFieldName];
- Value ns = input[repl::OplogEntry::kNamespaceFieldName];
- checkValueType(ns, repl::OplogEntry::kNamespaceFieldName, BSONType::String);
+ Value ns = input[repl::OplogEntry::kNssFieldName];
+ checkValueType(ns, repl::OplogEntry::kNssFieldName, BSONType::String);
Value uuid = input[repl::OplogEntry::kUuidFieldName];
std::vector<FieldPath> documentKeyFields;
@@ -417,7 +417,7 @@ Value DocumentSourceChangeStreamTransform::serialize(
DepsTracker::State DocumentSourceChangeStreamTransform::getDependencies(DepsTracker* deps) const {
deps->fields.insert(repl::OplogEntry::kOpTypeFieldName.toString());
deps->fields.insert(repl::OplogEntry::kTimestampFieldName.toString());
- deps->fields.insert(repl::OplogEntry::kNamespaceFieldName.toString());
+ deps->fields.insert(repl::OplogEntry::kNssFieldName.toString());
deps->fields.insert(repl::OplogEntry::kUuidFieldName.toString());
deps->fields.insert(repl::OplogEntry::kObjectFieldName.toString());
deps->fields.insert(repl::OplogEntry::kObject2FieldName.toString());
diff --git a/src/mongo/db/repl/applier_helpers.cpp b/src/mongo/db/repl/applier_helpers.cpp
index 2f71095c2c0..658de205c8d 100644
--- a/src/mongo/db/repl/applier_helpers.cpp
+++ b/src/mongo/db/repl/applier_helpers.cpp
@@ -61,7 +61,7 @@ void ApplierHelpers::stableSortByNamespace(MultiApplier::OperationPtrs* oplogEnt
return;
}
auto nssComparator = [](const OplogEntry* l, const OplogEntry* r) {
- return l->getNamespace() < r->getNamespace();
+ return l->getNss() < r->getNss();
};
std::stable_sort(oplogEntryPointers->begin(), oplogEntryPointers->end(), nssComparator);
}
@@ -99,7 +99,7 @@ StatusWith<InsertGroup::ConstIterator> InsertGroup::groupAndApplyInserts(ConstIt
// Make sure to include the first op in the batch size.
auto batchSize = entry.getObject().objsize();
auto batchCount = OperationPtrs::size_type(1);
- auto batchNamespace = entry.getNamespace();
+ auto batchNamespace = entry.getNss();
/**
* Search for the op that delimits this insert batch, and save its position
@@ -117,7 +117,7 @@ StatusWith<InsertGroup::ConstIterator> InsertGroup::groupAndApplyInserts(ConstIt
*/
auto endOfGroupableOpsIterator =
std::find_if(it + 1, _end, [&](const OplogEntry* nextEntry) -> bool {
- auto opNamespace = nextEntry->getNamespace();
+ auto opNamespace = nextEntry->getNss();
batchSize += nextEntry->getObject().objsize();
batchCount += 1;
diff --git a/src/mongo/db/repl/apply_ops_test.cpp b/src/mongo/db/repl/apply_ops_test.cpp
index 8b5179609bc..84573838b5c 100644
--- a/src/mongo/db/repl/apply_ops_test.cpp
+++ b/src/mongo/db/repl/apply_ops_test.cpp
@@ -444,7 +444,7 @@ TEST_F(ApplyOpsTest, ExtractOperationsReturnsOperationsWithSameOpTimeAsApplyOps)
ASSERT(OpTypeEnum::kInsert == operation1.getOpType()) << "Unexpected op type: "
<< operation1.toBSON();
ASSERT_EQUALS(ui1, *operation1.getUuid());
- ASSERT_EQUALS(ns1, operation1.getNamespace());
+ ASSERT_EQUALS(ns1, operation1.getNss());
ASSERT_BSONOBJ_EQ(BSON("_id" << 1), operation1.getOperationToApply());
// OpTime of CRUD operation should match applyOps.
@@ -457,7 +457,7 @@ TEST_F(ApplyOpsTest, ExtractOperationsReturnsOperationsWithSameOpTimeAsApplyOps)
ASSERT(OpTypeEnum::kInsert == operation2.getOpType()) << "Unexpected op type: "
<< operation2.toBSON();
ASSERT_EQUALS(ui2, *operation2.getUuid());
- ASSERT_EQUALS(ns2, operation2.getNamespace());
+ ASSERT_EQUALS(ns2, operation2.getNss());
ASSERT_BSONOBJ_EQ(BSON("_id" << 2), operation2.getOperationToApply());
// OpTime of CRUD operation should match applyOps.
@@ -470,7 +470,7 @@ TEST_F(ApplyOpsTest, ExtractOperationsReturnsOperationsWithSameOpTimeAsApplyOps)
ASSERT(OpTypeEnum::kUpdate == operation3.getOpType()) << "Unexpected op type: "
<< operation3.toBSON();
ASSERT_EQUALS(ui3, *operation3.getUuid());
- ASSERT_EQUALS(ns3, operation3.getNamespace());
+ ASSERT_EQUALS(ns3, operation3.getNss());
ASSERT_BSONOBJ_EQ(BSON("_id" << 3), operation3.getOperationToApply());
auto optionalUpsertBool = operation3.getUpsert();
diff --git a/src/mongo/db/repl/dbcheck.cpp b/src/mongo/db/repl/dbcheck.cpp
index 62e3f5da9f8..5edd664a28d 100644
--- a/src/mongo/db/repl/dbcheck.cpp
+++ b/src/mongo/db/repl/dbcheck.cpp
@@ -122,7 +122,7 @@ std::unique_ptr<HealthLogEntry> dbCheckHealthLogEntry(const NamespaceString& nss
OplogEntriesEnum operation,
const BSONObj& data) {
auto entry = stdx::make_unique<HealthLogEntry>();
- entry->setNamespace(nss);
+ entry->setNss(nss);
entry->setTimestamp(Date_t::now());
entry->setSeverity(severity);
entry->setScope(ScopeEnum::Cluster);
diff --git a/src/mongo/db/repl/oplog_entry.cpp b/src/mongo/db/repl/oplog_entry.cpp
index cf7838a7f19..4a3b22ce4f2 100644
--- a/src/mongo/db/repl/oplog_entry.cpp
+++ b/src/mongo/db/repl/oplog_entry.cpp
@@ -104,7 +104,7 @@ BSONObj makeOplogEntryDoc(OpTime opTime,
builder.append(OplogEntryBase::kHashFieldName, hash);
builder.append(OplogEntryBase::kVersionFieldName, version);
builder.append(OplogEntryBase::kOpTypeFieldName, OpType_serializer(opType));
- builder.append(OplogEntryBase::kNamespaceFieldName, nss.toString());
+ builder.append(OplogEntryBase::kNssFieldName, nss.toString());
if (uuid) {
uuid->appendToBuilder(&builder, OplogEntryBase::kUuidFieldName);
}
@@ -150,7 +150,7 @@ ReplOperation OplogEntry::makeInsertOperation(const NamespaceString& nss,
const BSONObj& docToInsert) {
ReplOperation op;
op.setOpType(OpTypeEnum::kInsert);
- op.setNamespace(nss);
+ op.setNss(nss);
op.setUuid(uuid);
op.setObject(docToInsert.getOwned());
return op;
@@ -162,7 +162,7 @@ ReplOperation OplogEntry::makeUpdateOperation(const NamespaceString nss,
const BSONObj& criteria) {
ReplOperation op;
op.setOpType(OpTypeEnum::kUpdate);
- op.setNamespace(nss);
+ op.setNss(nss);
op.setUuid(uuid);
op.setObject(update.getOwned());
op.setObject2(criteria.getOwned());
@@ -174,14 +174,14 @@ ReplOperation OplogEntry::makeDeleteOperation(const NamespaceString& nss,
const BSONObj& docToDelete) {
ReplOperation op;
op.setOpType(OpTypeEnum::kDelete);
- op.setNamespace(nss);
+ op.setNss(nss);
op.setUuid(uuid);
op.setObject(docToDelete.getOwned());
return op;
}
size_t OplogEntry::getReplOperationSize(const ReplOperation& op) {
- return sizeof(op) + op.getNamespace().size() + op.getObject().objsize() +
+ return sizeof(op) + op.getNss().size() + op.getObject().objsize() +
(op.getObject2() ? op.getObject2()->objsize() : 0);
}
diff --git a/src/mongo/db/repl/oplog_entry.idl b/src/mongo/db/repl/oplog_entry.idl
index 9d0af006a97..6b85cab2562 100644
--- a/src/mongo/db/repl/oplog_entry.idl
+++ b/src/mongo/db/repl/oplog_entry.idl
@@ -54,7 +54,7 @@ structs:
type: OpType
description: "The operation type"
ns:
- cpp_name: namespace
+ cpp_name: nss
type: namespacestring
description: "The namespace on which to apply the operation"
ui:
diff --git a/src/mongo/db/repl/oplog_test.cpp b/src/mongo/db/repl/oplog_test.cpp
index 4f0de89c5f8..e21c5e47a82 100644
--- a/src/mongo/db/repl/oplog_test.cpp
+++ b/src/mongo/db/repl/oplog_test.cpp
@@ -140,7 +140,7 @@ void _checkOplogEntry(const OplogEntry& oplogEntry,
const OpTime& expectedOpTime,
const NamespaceString& expectedNss) {
ASSERT_EQUALS(expectedOpTime, oplogEntry.getOpTime()) << oplogEntry.toBSON();
- ASSERT_EQUALS(expectedNss, oplogEntry.getNamespace()) << oplogEntry.toBSON();
+ ASSERT_EQUALS(expectedNss, oplogEntry.getNss()) << oplogEntry.toBSON();
}
void _checkOplogEntry(const OplogEntry& oplogEntry,
const std::pair<OpTime, NamespaceString>& expectedOpTimeAndNss) {
diff --git a/src/mongo/db/repl/rollback_impl.cpp b/src/mongo/db/repl/rollback_impl.cpp
index c1557c9d522..fcbd98e26c6 100644
--- a/src/mongo/db/repl/rollback_impl.cpp
+++ b/src/mongo/db/repl/rollback_impl.cpp
@@ -346,7 +346,7 @@ Status RollbackImpl::_awaitBgIndexCompletion(OperationContext* opCtx) {
}
StatusWith<std::set<NamespaceString>> RollbackImpl::_namespacesForOp(const OplogEntry& oplogEntry) {
- NamespaceString opNss = oplogEntry.getNamespace();
+ NamespaceString opNss = oplogEntry.getNss();
OpTypeEnum opType = oplogEntry.getOpType();
std::set<NamespaceString> namespaces;
@@ -520,7 +520,7 @@ Status RollbackImpl::_findRecordStoreCounts(OperationContext* opCtx) {
Status RollbackImpl::_processRollbackOp(const OplogEntry& oplogEntry) {
++_observerInfo.numberOfEntriesObserved;
- NamespaceString opNss = oplogEntry.getNamespace();
+ NamespaceString opNss = oplogEntry.getNss();
OpTypeEnum opType = oplogEntry.getOpType();
// For applyOps entries, we process each sub-operation individually.
diff --git a/src/mongo/db/repl/rs_rollback.cpp b/src/mongo/db/repl/rs_rollback.cpp
index 0ce3a34d3ea..19eeda570b0 100644
--- a/src/mongo/db/repl/rs_rollback.cpp
+++ b/src/mongo/db/repl/rs_rollback.cpp
@@ -245,13 +245,13 @@ Status rollback_internal::updateFixUpInfoFromLocalOplogEntry(FixUpInfo& fixUpInf
}
// Extract the op's collection namespace and UUID.
- NamespaceString nss = oplogEntry.getNamespace();
+ NamespaceString nss = oplogEntry.getNss();
auto uuid = oplogEntry.getUuid();
if (oplogEntry.getOpType() == OpTypeEnum::kNoop)
return Status::OK();
- if (oplogEntry.getNamespace().isEmpty()) {
+ if (oplogEntry.getNss().isEmpty()) {
throw RSFatalException(str::stream() << "Local op on rollback has no ns: "
<< redact(oplogEntry.toBSON()));
}
diff --git a/src/mongo/db/repl/session_update_tracker.cpp b/src/mongo/db/repl/session_update_tracker.cpp
index 73b6d90e8b5..4028d6980c0 100644
--- a/src/mongo/db/repl/session_update_tracker.cpp
+++ b/src/mongo/db/repl/session_update_tracker.cpp
@@ -39,7 +39,7 @@ namespace repl {
boost::optional<std::vector<OplogEntry>> SessionUpdateTracker::updateOrFlush(
const OplogEntry& entry) {
- auto ns = entry.getNamespace();
+ auto ns = entry.getNss();
if (ns == NamespaceString::kSessionTransactionsTableNamespace ||
(ns.isConfigDB() && ns.isCommand())) {
return flush(entry);
diff --git a/src/mongo/db/repl/sync_tail.cpp b/src/mongo/db/repl/sync_tail.cpp
index 5c57adde2c5..ee5cea520f8 100644
--- a/src/mongo/db/repl/sync_tail.cpp
+++ b/src/mongo/db/repl/sync_tail.cpp
@@ -208,7 +208,7 @@ void ApplyBatchFinalizerForJournal::_run() {
NamespaceString parseUUIDOrNs(OperationContext* opCtx, const OplogEntry& oplogEntry) {
auto optionalUuid = oplogEntry.getUuid();
if (!optionalUuid) {
- return oplogEntry.getNamespace();
+ return oplogEntry.getNss();
}
const auto& uuid = optionalUuid.get();
@@ -498,7 +498,7 @@ void fillWriterVectors(OperationContext* opCtx,
CachedCollectionProperties collPropertiesCache;
for (auto&& op : *ops) {
- StringMapTraits::HashedKey hashedNs(op.getNamespace().ns());
+ StringMapTraits::HashedKey hashedNs(op.getNss().ns());
uint32_t hash = hashedNs.hash();
// We need to track all types of ops, including type 'n' (these are generated from chunk
@@ -930,7 +930,7 @@ bool SyncTail::tryPopAndWaitForMore(OperationContext* opCtx,
// multiple oplog entries on 'system.views' are being applied out of the original order.
if ((entry.isCommand() &&
(entry.getCommandType() != OplogEntry::CommandType::kApplyOps || entry.shouldPrepare())) ||
- entry.getNamespace().isSystemDotViews()) {
+ entry.getNss().isSystemDotViews()) {
if (ops->getCount() == 1) {
// apply commands one-at-a-time
_consume(opCtx, oplogBuffer);
@@ -1017,7 +1017,7 @@ BSONObj SyncTail::getMissingDoc(OperationContext* opCtx, const OplogEntry& oplog
BSONObj query = BSONObjBuilder().append(idElem).obj();
BSONObj missingObj;
- auto nss = oplogEntry.getNamespace();
+ auto nss = oplogEntry.getNss();
try {
auto uuid = oplogEntry.getUuid();
if (!uuid) {
diff --git a/src/mongo/db/repl/sync_tail_test.cpp b/src/mongo/db/repl/sync_tail_test.cpp
index e516eb57124..6c2d6d42258 100644
--- a/src/mongo/db/repl/sync_tail_test.cpp
+++ b/src/mongo/db/repl/sync_tail_test.cpp
@@ -917,7 +917,7 @@ TEST_F(SyncTailTest, MultiSyncApplyAppliesInsertOpsIndividuallyWhenUnableToCreat
makeOp(NamespaceString(testNs + "_3"))};
for (const auto& oplogEntry : operationsToApply) {
- createCollectionWithUuid(_opCtx.get(), oplogEntry.getNamespace());
+ createCollectionWithUuid(_opCtx.get(), oplogEntry.getNss());
}
// Each element in 'docsInserted' is a grouped insert operation.
diff --git a/src/mongo/db/s/session_catalog_migration_destination.cpp b/src/mongo/db/s/session_catalog_migration_destination.cpp
index 2b12fee36e1..ede0ae0f8b5 100644
--- a/src/mongo/db/s/session_catalog_migration_destination.cpp
+++ b/src/mongo/db/s/session_catalog_migration_destination.cpp
@@ -278,7 +278,7 @@ ProcessOplogResult processSessionOplog(OperationContext* opCtx,
result.oplogTime = repl::logOp(opCtx,
"n",
- oplogEntry.getNamespace(),
+ oplogEntry.getNss(),
oplogEntry.getUuid(),
object,
&object2,
diff --git a/src/mongo/db/s/session_catalog_migration_source.cpp b/src/mongo/db/s/session_catalog_migration_source.cpp
index a3a7edd1654..6e1ffc21134 100644
--- a/src/mongo/db/s/session_catalog_migration_source.cpp
+++ b/src/mongo/db/s/session_catalog_migration_source.cpp
@@ -196,7 +196,7 @@ bool SessionCatalogMigrationSource::_handleWriteHistory(WithLock, OperationConte
// Note: This is an optimization based on the assumption that it is not possible to be
// touching different namespaces in the same transaction.
if (!nextStmtId || (nextStmtId && *nextStmtId != kIncompleteHistoryStmtId &&
- nextOplog.getNamespace() != _ns)) {
+ nextOplog.getNss() != _ns)) {
_currentOplogIterator.reset();
return false;
}
diff --git a/src/mongo/dbtests/storage_timestamp_tests.cpp b/src/mongo/dbtests/storage_timestamp_tests.cpp
index 62bd216202f..115eaa10d51 100644
--- a/src/mongo/dbtests/storage_timestamp_tests.cpp
+++ b/src/mongo/dbtests/storage_timestamp_tests.cpp
@@ -1255,7 +1255,7 @@ public:
// The next logOp() call will get 'futureTs', which will be the timestamp at which we do
// the write. Thus we expect the write to appear at 'futureTs' and not before.
ASSERT_EQ(op.getTimestamp(), futureTs) << op.toBSON();
- ASSERT_EQ(op.getNamespace().ns(), nss.getCommandNS().ns()) << op.toBSON();
+ ASSERT_EQ(op.getNss().ns(), nss.getCommandNS().ns()) << op.toBSON();
ASSERT_BSONOBJ_EQ(op.getObject(), BSON("create" << nss.coll()));
assertNamespaceInIdents(nss, pastTs, false);
diff --git a/src/mongo/idl/unittest.idl b/src/mongo/idl/unittest.idl
index 958150b5cfc..ddbe386fd91 100644
--- a/src/mongo/idl/unittest.idl
+++ b/src/mongo/idl/unittest.idl
@@ -185,7 +185,7 @@ structs:
strict: false
fields:
field1: RequiredStrictField3
- field2:
+ field2:
type: RequiredNonStrictField3
optional: true
field3: RequiredStrictField3
@@ -617,3 +617,5 @@ commands:
type: array<int>
fields:
field1: int
+
+