Commit Graph

54 Commits

Author SHA1 Message Date
Alex Buynytskyy
c2a645d717 Unblock the unmount on uninstallation.
Bug: b/153874006
Test: test PackageManagerShellCommandTest PackageManagerShellCommandIncrementalTest IncrementalServiceTest
Change-Id: I540ed36b87c40b8b58f0de727936c3efeb221198
2020-04-20 14:11:55 -07:00
Alex Buynytskyy
9a54579ac5 Cleaning up resources on mount destruction.
DataLoaderStub's lifetime is controlled externally, but we want to
release resources ASAP.

Bug: b/153874006
Test: atest PackageManagerShellCommandTest PackageManagerShellCommandIncrementalTest IncrementalServiceTest
Change-Id: I34035f36d1fe4ed0e4916014d859feb7fe2c0a09
2020-04-17 22:07:10 -07:00
Alex Buynytskyy
ab65cb1824 Switching to FSM-based DL lifecycle.
This is a pure refactoring.

Bug: b/153874006
Test: atest PackageManagerShellCommandTest PackageManagerShellCommandIncrementalTest IncrementalServiceTest
Change-Id: Ieda2be08d7359fa69b2d328c85b3606de6d02b3d
2020-04-17 11:02:16 -07:00
TreeHugger Robot
3e188ae81d Merge "[incfs] Fix the block size calculation in .so extraction" into rvc-dev 2020-04-15 00:52:43 +00:00
Yurii Zubrytskyi
6c65a56d39 [incfs] Fix the block size calculation in .so extraction
Bug: 154044009
Test: adb install megacity.apk && adb shell cat *.so
Change-Id: I0069c8cfa74c83810152d917a2bac9cdaf24d6a7
2020-04-14 15:25:49 -07:00
Alex Buynytskyy
0b20266c12 DataLoader lifecycle.
- mark disconnected DataLoaders as non-existent (destroyed),
- remove storage destroy on DataLoader destroy,
- more robust destroy on destruct handling,
- less race-conditions.

Bug: b/153874006
Test: atest PackageManagerShellCommandTest PackageManagerShellCommandIncrementalTest IncrementalServiceTest
Change-Id: Ib77302aac546d66ce40c5345417c7b424a1d601b
2020-04-14 09:25:37 -07:00
Yurii Zubrytskyi
721ac4d350 [incfs] Correctly wait for async .so's extraction
StorageID for an installation changes as we go from a staging
directory to the final one. That's why the only correct way
of waiting for the extraction to complete is by the whole
MountID, even if later it would cause the call to wait on all
instances of the app.

+ measure the waiting timing

Bug: 153513507
Test: adb install megacity.apk
Change-Id: I83558f155867ae5503719ecb63d591fc969c3995
2020-04-13 11:34:32 -07:00
Alex Buynytskyy
6994166a09 Reconnect to DataLoaders on restart.
Bug: b/151241369
Test: atest PackageManagerShellCommandTest PackageManagerShellCommandIncrementalTest IncrementalServiceTest
Change-Id: I1532df63a2a36104dbd9cd90ee4e5f40bae00a6a
2020-04-11 21:40:37 -07:00
Yurii Zubrytskyi
8632140038 [incfs] Fix a crash in worker thread calling JNI
Worker thread has to initialize JNI separately to be able
to call into managed binders implemented in the same
system_server process, e.g. DataLoaderManager

Bug: 153513507
Test: adb install megacity.nov4.apk; adb install megacity.v4.apk
Change-Id: I668e8664361cd2fb3353ec50efd689c7d613658f
2020-04-10 13:47:54 -07:00
Yurii Zubrytskyi
da208016d6 [incfs] Make native library extraction async
IncrementalService can create the library files beforehand, but
delay filling in their data. As it takes quite a while in
general (over a second in cases when the phone is busy), it's
better to run the unzipping and filling in a separate thread
and only make sure it finishes before the whole installation
process is complete.
This speeds up the megacity.apk installation by ~250-300ms,
1000-1100ms -> 750-800ms

Bug: 153513507
Test: adb install megacity.apk

Change-Id: Ia44f7e45b9e0abaebdfb6fe5352f9dcf29ab4ece
2020-04-10 12:30:49 -07:00
TreeHugger Robot
771027008b Merge "Refactor: move dataLoader details to a separate class." into rvc-dev 2020-04-10 16:53:56 +00:00
Yurii Zubrytskyi
0cd8012b73 Get rid of two runtime static destructors
Bug: 153704006
Test: compiles
Change-Id: Icb44c2d2c1e26b13a4d03a4996bffe016a141286
2020-04-10 16:49:34 +00:00
Alex Buynytskyy
0ea4ff4d97 Refactor: move dataLoader details to a separate class.
Bug: b/151241369
Test: atest PackageManagerShellCommandTest PackageManagerShellCommandIncrementalTest IncrementalServiceTest
Change-Id: If4e7d3bb9f0951dcaee4315f4be525883b7fc333
2020-04-09 22:55:49 -07:00
Alex Buynytskyy
119de1fb2a More setStorageParams improvements.
Using proper AppOp name: loader_usage_stats

Bug: b/152633648
Test: atest PackageManagerShellCommandTest PackageManagerShellCommandIncrementalTest IncrementalServiceTest
Test: adb shell appops set 1000 LOADER_USAGE_STATS deny
Change-Id: I199476ce29c81836c5402577ac225450cc5c9c82
2020-04-08 20:07:22 -07:00
TreeHugger Robot
b9bc1dffbb Merge "Uninitialized member fix :(" into rvc-dev 2020-04-08 05:48:09 +00:00
Alex Buynytskyy
5f9e3a0dc6 Uninitialized member fix :(
Bug: b/153468113
Test: atest PackageManagerShellCommandTest PackageManagerShellCommandIncrementalTest IncrementalServiceTest
Change-Id: Ida26dc1476c2b329f9aba4d605e65c43e2cafac2
2020-04-07 21:13:41 -07:00
TreeHugger Robot
9f16f2665a Merge "Change the way how we call setStorageParams." into rvc-dev 2020-04-08 00:48:58 +00:00
Alex Buynytskyy
f415679228 Change the way how we call setStorageParams.
Now it's unified with callback FS connector - we are passing the
callback pointer directly to dataloader. This restricts access only
to methods we want and only by someone we want.

Bug: b/153468113
Test: atest PackageManagerShellCommandTest PackageManagerShellCommandIncrementalTest IncrementalServiceTest
Change-Id: Ib557ebbe7c6c5ce92140eb20534a3626b3ac96d3
2020-04-07 14:42:50 -07:00
Yurii Zubrytskyi
c3fcae21ae Merge "[incfs] Add time measurement for native libs extraction" into rvc-dev 2020-04-07 18:20:18 +00:00
Yurii Zubrytskyi
3787c9f5c6 [incfs] Add time measurement for native libs extraction
Use the "incremental.perflogging" boolean system property
to enable it

+ a bunch of code cleanups

Bug: 152913040
Test: manual

Change-Id: I1cd259ff5821a47ce055003049f77cbf43eba24a
2020-04-07 09:20:35 -07:00
Alex Buynytskyy
1d89216eac Appops permission monitoring for GET_USAGE_STATS.
This makes sure DataLoader won't be able to obtain read logs once user
denies access.

Bug: b/152633648
Test: atest PackageManagerShellCommandTest PackageManagerShellCommandIncrementalTest IncrementalServiceTest
Test: adb shell appops set 1000 GET_USAGE_STATS deny
Change-Id: Ibbb74933b4ef0dd8f5fe27732743e5820b8ee4dc
2020-04-06 12:22:49 -07:00
Alex Buynytskyy
96e350b30d Disallow read logs collection if user changes their mind.
Bug: b/152633648
Test: atest PackageManagerShellCommandTest PackageManagerShellCommandIncrementalTest IncrementalServiceTest
Test: adb shell appops set 1000 GET_USAGE_STATS deny
Change-Id: I7fc8356f84fe30669483470579eedf546f81f297
2020-04-03 18:44:43 -07:00
Yurii Zubrytskyi
107ae35444 [incfs] fix the storage loading for existing mounts
IncrementalService used to keep the storage parameters in the
directory metadata, but our current incfs doesn't support
metadata on directories - so the storage id is encoded in its
name. But the loading code used to think it's still in the
metadata and couldn't load anything for that reason

Bug: 151241369
Test: install an app and reboot the phone. It's still there
Change-Id: Ic93f8f368b48fc5c5cc9bb726eff80478183596c
2020-04-03 13:15:53 -07:00
Alex Buynytskyy
50e0244012 Merge changes from topic "LOADER_USAGE_STATS" into rvc-dev
* changes:
  Checking LOADER_USAGE_STATS before enabling read logs.
  Revert "Update the current API dump"
2020-04-02 00:36:26 +00:00
Alex Buynytskyy
5e860ba105 Checking LOADER_USAGE_STATS before enabling read logs.
Bug: b/152633648
Test: atest PackageManagerShellCommandTest PackageManagerShellCommandIncrementalTest IncrementalServiceTest
Change-Id: Ic747a51b97b785c627c95bddecc6834ef602ff30
2020-04-02 00:31:41 +00:00
Yurii Zubrytskyi
e82cdd7935 Use the new incfs API to open files
Bug: 152983639
Test: atest service.incremental_test
Change-Id: If33891d4699d5ddf2789ac99677a67e2b004d94e
2020-04-01 12:19:26 -07:00
Songchun Fan
20d6ef2477 [frameworks] update with incfs.h
BUG: 150470163
Test: atest PackageManagerShellCommandIncrementalTest
Change-Id: I32ac2576c7468e04ada61e82ca778f762ce2559f
2020-03-27 16:40:27 -07:00
Alex Buynytskyy
686a537376 Dynamic args complete removal.
Bug: b/150470163
Test: atest PackageManagerShellCommandIncrementalTest PackageManagerShellCommandTest
Change-Id: I122f37f210ef9b8b02d565c34245ebeec26d83b2
2020-03-26 16:28:33 -07:00
Yurii Zubrytskyi
9cce14eb0e Merge "[incremental native lib] skip writing to zero byte files" into rvc-dev 2020-03-19 06:23:23 +00:00
Yurii Zubrytskyi
793f73812d Merge "Incremental apps removal on data loader failures." into rvc-dev 2020-03-19 06:20:37 +00:00
Songchun Fan
afaf6e9ee7 [incremental native lib] skip writing to zero byte files
Test: adb install --incremental /google/data/rw/teams/tradefed/testdata/thirdparty_apps_stable/MX_Player_1.9.17.apk
BUG: 150795871
Change-Id: Idca09929f41424edb527b9b89dea1974c1f8ea46
2020-03-18 14:17:04 -07:00
Yurii Zubrytskyi
1d6e6bfe96 Merge "Removing race condition accessing shared binder object." into rvc-dev 2020-03-18 19:54:55 +00:00
Alex Buynytskyy
2cf1d18fe1 Incremental apps removal on data loader failures.
Test: adb install --incremental megacity.apk over USB2.0, remove usb connection
after installed.
Bug: b/15041101

Change-Id: Ib848640dbe49c76021f7cf544de4413599c2c763
2020-03-18 10:18:48 -07:00
Alex Buynytskyy
b6e02f7b09 Removing race condition accessing shared binder object.
Test: incrementally installing two apks at the same time
Bug: b/150411019
Change-Id: I81231edf7a32470542ec529aa305b4f9fb2b80e3
2020-03-18 09:01:36 -07:00
Songchun Fan
eee228f65e Merge "[incremental service] avoid nullptr dereferencing" into rvc-dev 2020-03-18 05:19:56 +00:00
Songchun Fan
306b7df3f9 [incremental service] avoid nullptr dereferencing
externalListener could be nullptr.

BUG: 150795871
Test: atest service.incremental_test
Change-Id: I2843e1751cb1f7e9318edb05e9a8f5256ad9f3a8
2020-03-17 14:27:31 -07:00
Alex Buynytskyy
f5e605a00c Updated v4 signature processing.
Passing to libincfs.so.
Obtaining and verifying, including v3 digest check.

go/apk-v4-signature-format

Test: atest PackageManagerShellCommandTest
Bug: b/151241461
Change-Id: Id61f5716b9f9b55d6ab1ebca5a7ecb1c6e54570a
2020-03-13 15:13:25 -07:00
Jooyung Han
66c567a8c4 Use aidl::nullable for nullable type in C++
To reduce the discrepance between old code which still uses
std::unique_ptr and new code using std::optional.

This might help to avoid merge-conflicts between branches.

Bug: 144773267
Test: m
Merged-In: Ie3196ee5cce17d77950eea9479d2cc1406e9e674
Merged-In: I33822bc76ef87637d5408849f64a0607e121792e
Change-Id: I33822bc76ef87637d5408849f64a0607e121792e
(cherry picked from commit ad62e8cbf5)

Exempt-From-Owner-Approval: cherry-pick from master with owner's approval
2020-03-12 11:36:33 +00:00
Alex Buynytskyy
bf1c063481 DataLoader lifecycle cleanup.
Remove 5 second delay in startLoading()
Remove sysprops: incremental.skip_loader

Test: atest PackageManagerShellCommandTest PackageManagerShellCommandIncrementalTest
Bug: b/151178179 b/136132412
Change-Id: Ibbe921c444b7e11fe5482662ca791bd8dfeb8324
2020-03-11 09:22:34 -07:00
Songchun Fan
68645c42ac directly call data loader manager service from incremental service
BUG: 150406132
Test: atest service.incremental_test
Test: atest PackageManagerShellCommandIncrementalTest
Change-Id: I2bb75d5adae58d2471478f6a4d2354058d7b0dab
2020-03-03 21:18:30 -08:00
Songchun Fan
1124fd38c1 Fix mounting existing images on reboot
Fixes paths.

BUG: b/133435829
Test: manual
Change-Id: Ib48ac36e8b22f8e2a85d5e223c6dd0f8b5289045
2020-02-11 16:21:16 -08:00
Alex Buynytskyy
f3b2e68fae Merge "Incremental installations in PackageManagerShellCommand." 2020-02-11 21:24:55 +00:00
Alex Buynytskyy
04f7391fc3 Incremental installations in PackageManagerShellCommand.
- onPrepareImage in native,
- allow to check installation type and choose native or managed
dataloaders,
- native data loader for Incremental,
- install-incremental shell command.

Test: atest PackageManagerShellCommandTest
Test: atest IncrementalServiceTest
Bug: b/136132412 b/133435829
Change-Id: I530a8a203fb50132c1869abd0b869036add18699
2020-02-11 13:11:31 -08:00
George Burgess IV
dd5275dcc4 incfs: fix uninitialized values
Clang's static analyzer is flagging uninitialized struct fields that
we're passing around. In particular, it's not happy that we pass this
partially-initialized struct to a pure-virtual method. I tend to agree
that this may cause issues.

Assuming zero-init gives us reasonable values for all of:

IncFsNewFileParams{}.verification.rootHash
IncFsNewFileParams{}.verification.additionalData
IncFsNewFileParams{}.verification.signature

Bug: None
Test: TreeHugger
Change-Id: I61e556cd8c0e68cdaebd50b0a7be5d5e0a4fd8ff
2020-02-10 11:26:40 -08:00
Songchun Fan
0f8b6fe950 Incremental native lib extraction
Basically we configure all the lib files inside Incremental Service,
e.g., create lib dirs, make lib files, extract original
lib file data from zip and then write data to the lib files on incfs.

Test: manual with incremental installation
BUG: b/136132412 b/133435829
Change-Id: I7544d2e78bcf3bdd76ce4c0766ec31ff13fd2011
2020-02-07 11:35:48 -08:00
TreeHugger Robot
1a79ff69de Merge "fix dir creation mode" 2020-02-04 07:19:54 +00:00
TreeHugger Robot
fb740d58fe Merge "Dumpsys support for IncrementalService." 2020-02-04 06:56:31 +00:00
Alex Buynytskyy
18b07a4252 Dumpsys support for IncrementalService.
Test: atest PackageManagerShellCommandTest
Test: adb shell dumpsys incremental
Bug: b/136132412 b/133435829
Change-Id: I8a91eddb850c68da87f56a82ca14fdf9ac5d3ce5
2020-02-03 20:09:00 -08:00
Songchun Fan
103ba1db21 more normalized path fix
Test: manual
Change-Id: I8fe073cb4bc4fa1a3af784cfcfa8db4d0a232991
2020-02-04 03:27:45 +00:00
Songchun Fan
9610093a7b fix dir creation mode
They need to be writable by owner.

Test: manual
Change-Id: I3e99094e5752c0f6bb351cc24bdf5698b7a4bde2
2020-02-04 03:27:08 +00:00