* Move FSTQueryCacheTests files to Firestore/core
* Rewrite QueryCache tests in C++
* Fix test flake in local store tests
This doesn't affect production because we always set the additional
references pointer there, but it's technically optional and some tests
don't do this.
There are more sources that can be `.cc` now (e.g., in API); these are left for a follow-up PR.
The dependency on Objective-C proto library cannot be removed just yet due to current lack of pretty-printing support for Nanopb.
After this PR is merged, the Objective-C serializers can be completely removed from the project. Also, this PR changes the `Message` class quite a bit; it's probably in its final form now.
I did some performance testing locally and came to the conclusion that replacing Objective-C serializers with their C++ versions brings no performance downgrade; actually, there seems to be a very slight improvement. I tested writing large batches and reading large collections:
* both are network-dominated; wall time is about twice longer than CPU time;
* serialization represents a pretty small percentage of the total CPU time;
* for writing, C++ serialization is a little more efficient, taking ~6% of total CPU time, compared to ~8% in the Objective-C version. I've seen similar results for reading.
All integration tests pass, under Address Sanitizer as well.
* Move FSTPersistenceHelpers to core/test/.../local
* Rewrite persistence_testing in C++
* Migrate from FSTPersistenceTestHelpers to C++ persistence_testing
* Rename .mm to .cc where possible in IndexManager tests
* Remove Objective-C gunk from index_manager_test.h
Replace all uses of `FSTSerializerBeta` in `remote_objc_bridge.{h,mm}` with the C++ `Serializer`. Also, make most of `remote/` sources pure C++ and remove no-longer-used methods in `FSTSerializerBeta`. All integration tests pass, under Address Sanitizer as well.
Unfortunately, pretty-printing is still delegated to Objective-C, so that `remote_objc_bridge.mm` still has to be an Objective-C++ source (and which prevents inlining `remote_objc_bridge` into the streams).
#no-changelog Will add a changelog entry when local serializer is ported, too.
* Update versions for Release 6.10.0
* Cherrypick #3983 and include Database in release. (#3986)
* Remove log argument that causes SocketRocket crash (#3983)
* Add FirebaseDatabase to release.
* Update CHANGELOG with version.
* Cherrypick for #3984 along with CHANGELOG update. (#3988)
* Fix race condition in FIRComponentContainer instance creation (#3984)
* Fix race condition in FIRComponentContainer instance creation
Reported in #3967. Users sometimes seeing a crash when multiple threads
concurrently try to create Firestore instances. By inspection I found
that there's a race here where two threads can check for presence in the
cache, see nothing, proceed to creation, both store a value in the cache,
and both return their copies. This would lead to two Firestores being
created for a single App.
This replaces `dispatch_sync` on a serial queue with good old
`@synchronized` blocks. `dispatch_sync` will self-deadlock if called
from a thread already on the queue while `@synchronized` allows
recursion.
No new tests are added because several tests like
`testDependencyDoesntBlock` already cover this case.
* format
* Update Core CHANGELOG
* Update Core CHANGELOG again
* Fix merge from CHANGELOG
* Drop dependency on OCMock
* Move Firestore onto Xcode 11 in Travis
* Special case simulators based on Xcode version, not product
This allows Firestore's build with Xcode 8.3.3 to continue to work.
* Make the Firestore Podfile install only one platform at a time
Use the PLATFORM environment variable to limit which targets are
modified. This makes the selected platform work but leaves the other
platforms in a broken state in the Xcode UI.
* Fix code signing errors on macOS builds
* Add Executor::CreateSerial
... a standard way to create an Executor for most cases where we don't
care about the implementation.
* Add ExecutorForTesting/AsyncQueueForTesting
Uses Executor::CreateSerial to do the heavy lifting.
* Use AsyncQueueForTesting
* Avoid direct references to ExecutorLibdispatch in prod code
* Rewrite time_testing in terms of absl::Time
* Migrate async_test_util's now to time_testing
* Fix AddressSanitizer stack-buffer-underflow error
This was reading random data off the stack until it hit a negative
integer's worth of data. The test passed because this was generating the
input and expected values, which were much longer than expected given
the input.
* Update versions for Release 6.9.0
* Fix unbalanced background task creation in GDTCCTUploader (#3838) (#3839)
* Add Manifest
* dependency version update
* Cherry picks for 6.9.0 (#3871)
* fixed "expiclitlySet" typo. (#3853)
* Mark unused variables (#3854)
* Mute FCM deprecated warnings with Xcode 11 and min iOS >= 10 (#3857)
* Add a third slash to make sure generated docs include these comments.b/13812238 (#3846)
* Port FSTMemoryPersistence to C++ (#3754)
* Add local::Persistence
* Add MemoryPersistence
* Add MemoryEagerReferenceDelegate
* Make LruDelegate extend ReferenceDelegate
This enables downcasting to LruDelegate in tests that need to do so.
* Add MemoryLruReferenceDelegate
* Don't double-count document key size.
* Port FSTLevelDB to C++ (#3755)
* Add LevelDbPersistence
Note that Apple-specific initialization has been partitioned off in
anticipation of being able to run this code on non-Apple platforms.
* Add LevelDbLruReferenceDelegate
* Migrate to C++ Persistence (1/2) (#3756)
* Use C++ Persistence classes in FSTLocalStore
* Remove ReferenceDelegateBridge
* Cut src over to C++ persistence types
* Remove Objective-C requirement from some classes
... that no longer require it.
* Migrate to C++ Persistence (2/2) (#3757)
* Remove LruDelegateBridge
* Update test initialization of persistence components
In particular, ensure that there's always an owner for the Persistence
instance, which wasn't always handled explicitly in the Objective-C
version of the tests.
* Largely mechanical changes to tests
* Remove Objective-C persistence classes
* Forward declare util::Status when possible (#3761)
* Add a header dedicated to forward declarations for util::Status
* Use status_fwd.h wherever possible
* Update versions for Release 6.8.0
* RemoteConfig fix pod spec lint (#3715) (#3716)
* ABTesting: add protos to private headers.
* RemoteConfig: #import <FirebaseABTesting/ExperimentPayload.pbobjc.h>
* ./scripts/style.sh
* Remote Config `pod spec lint` fixes (#3717) (#3718)
* Fix ExperimentPayload.pbobjc.h imports
* RemoteConfig tests: add missing headers to spec.
* Revert ExperimentPayload.pbobjc.h import for ABTesting sources.
* Add FDL to M55 (#3724)
* Remove references to UIWebView from DynamicLinks to comply with Apple "ITMS-90809: Deprecated API Usage" (#3723)
* Add FDL to M55
* Fix accessing a destroyed object (#3721) (#3725)
This was caused by running under Asan with XCode 11. Apparently, previous versions of XCode cannot catch it (which is why Travis is passing, apparently).
Also:
* enable "Detect use of stack after return" option for Asan. AFAIU, it can only be enabled in the scheme. It's already enabled for unit tests, this PR additionally enables it for integration tests;
* make Asan failures fail Travis build. They were originally not considered blocking due to some sporadic failures. I haven't seen those for some time, and worst case scenario, we can revert this change.
* Cherry pick GDT changes for 6.8.0 and increment versions (#3770)
* Release 6.8.0: cherry pick of #3764 and #3766 (#3772)
* Gate access to cached instances. (#3766)
* Gate access to cached instances.
This is causing an issue in #3728. Hopefully this will fix it, but no
repro is available yet to test. There's still an underlying race
condition where a `creationBlock` could be called twice for a component
that is supposed to cache the instance returned, but that should be
addressed in a follow up PR.
* Review feedback.
* Iterate from array copy in `latestExperimentStartTimestampBetweenTimestamp:` (#3764)
* Release 6.8.0 cherry pick: conflicting Dynamic Links changelog changes. (#3790)
* Update FDL CHANGELOG (#3781)
* Issue number, not PR number (#3785)
* Clean up references to Firestore.pbrpc
We're no longer using Objective-C gRPC services and this is no longer generated.
* Remove no longer existing entries from xcgmock
This was caused by running under Asan with XCode 11. Apparently, previous versions of XCode cannot catch it (which is why Travis is passing, apparently).
Also:
* enable "Detect use of stack after return" option for Asan. AFAIU, it can only be enabled in the scheme. It's already enabled for unit tests, this PR additionally enables it for integration tests;
* make Asan failures fail Travis build. They were originally not considered blocking due to some sporadic failures. I haven't seen those for some time, and worst case scenario, we can revert this change.
* Add ReferenceDelegate
* Remove Objective-C crutches from model/types.h and query_cache.h
* Add C++ LruGarbageCollector
* Add delegate bridges for LruDelegate and ReferenceDelegate
* Migrate from FSTLRUGarbageCollector to C++ LruGarbageCollector
The fix in #3647 was essentially undone in #3648 because even though the
podspec no longer depends on FirebaseCoreDiagnostics, adding in local
pod declarations for these brought them back into the project.
This change removes local pod declarations for the dependencies that
break under Xcode 8 as well.