diff --git a/.gitignore b/.gitignore index dbb5986..9348d7f 100644 --- a/.gitignore +++ b/.gitignore @@ -5,6 +5,7 @@ project/boot/ *.log *.loaded *.pid +nohup.out ## ## emacs & ensime ## diff --git a/README.md b/README.md index e0e9afb..02bc9af 100644 --- a/README.md +++ b/README.md @@ -108,6 +108,72 @@ sbt clean compile run ./scripts/rsong-int-tests.py localhost:9000 ``` +## Music Search + +sampleSearch payload: +```aidl +{ +"albumTitle":"Tiny Human", +"songTitle": "Tiny Human", +"artist": "ilan & kayvan rock" +} +``` +Sample Response payload +```aidl +{ + "song": { + "id": "Tiny Human", + "title": "Tiny Human", + "name": "Tiny Human", + "audio": [ + { + "effect": "3D", + "uri": "/v1/song/music/Tiny_Human_Immersive.izr", + "duration_ms": 1000 + }, + { + "effect": "Stereo", + "uri": "/v1/song/music/Tiny_Human_Stereo.izr", + "duration_ms": 1000 + } + ], + "language": "EN" + }, + "artists": [ + { + "id": "Imogen-Heap", + "title": "Imogen Heap", + "name": "Imogen Heap" + } + ], + "artwork": [ + { + "id": "Tiny Human", + "uri": "/v1/art/Tiny Human.jpg" + } + ], + "album": { + "id": "album-id-Tiny_Human", + "title": "Tiny Human", + "name": "Tiny Human", + "artworks": [ + { + "id": "Tiny Human", + "uri": "/v1/art/Tiny Human.jpg" + } + ], + "duration_ms": 10000, + "artists": [ + { + "id": "Imogen-Heap", + "title": "Imogen Heap", + "name": "Imogen Heap" + } + ], + "uri": "/v1/art/Tiny Human.jpg" + } +} +``` ## url Inventory ``` diff --git a/lib/casper_2.12.jar b/lib/casper_2.12.jar deleted file mode 100644 index 5327661..0000000 Binary files a/lib/casper_2.12.jar and /dev/null differ diff --git a/lib/comm_2.12.jar b/lib/comm_2.12.jar index b2c554e..99f99b5 100644 Binary files a/lib/comm_2.12.jar and b/lib/comm_2.12.jar differ diff --git a/lib/crypto_2.12.jar b/lib/crypto_2.12.jar index a749795..e01b53e 100644 Binary files a/lib/crypto_2.12.jar and b/lib/crypto_2.12.jar differ diff --git a/lib/models_2.12.jar b/lib/models_2.12.jar index 2ac1af0..a6ee5ef 100644 Binary files a/lib/models_2.12.jar and b/lib/models_2.12.jar differ diff --git a/lib/rholang_2.12.jar b/lib/rholang_2.12.jar index cf4eff9..2ccaa77 100644 Binary files a/lib/rholang_2.12.jar and b/lib/rholang_2.12.jar differ diff --git a/lib/rspace_2.12.jar b/lib/rspace_2.12.jar deleted file mode 100644 index 88d4453..0000000 Binary files a/lib/rspace_2.12.jar and /dev/null differ diff --git a/lib/shared_2.12.jar b/lib/shared_2.12.jar index 8114283..67dafe9 100644 Binary files a/lib/shared_2.12.jar and b/lib/shared_2.12.jar differ diff --git a/scripts/mit-hack-test.sh b/scripts/mit-hack-test.sh new file mode 100755 index 0000000..d68fa47 --- /dev/null +++ b/scripts/mit-hack-test.sh @@ -0,0 +1,4 @@ +curl --header "Content-Type: application/json" \ + --request POST \ + --data '{"id": "Tiny Human", "albumTitle":"Tiny Human", "songTitle": "Tiny Human", "artist": "artist-name-1"}' \ + http://localhost:9000/v1/music diff --git a/scripts/rsong-int-tests.py b/scripts/rsong-int-tests.py index 88edc06..9921b38 100755 --- a/scripts/rsong-int-tests.py +++ b/scripts/rsong-int-tests.py @@ -31,7 +31,7 @@ def _curl(name): return -for name in ['Broke', 'Euphoria', 'Tiny_Human']: +for name in ['Broke', 'Euphoria', 'Tiny_Human']: _curl(name) diff --git a/scripts/startValidator.sh b/scripts/startValidator.sh index fb09e8d..74f89d0 100755 --- a/scripts/startValidator.sh +++ b/scripts/startValidator.sh @@ -1,9 +1,12 @@ #!/bin/bash ## usage ./startValidator.sh - -rnode run -s \ +DIR=~/dev/workspaces/workspace-rchain/rchain/node/target/universal/rnode-0.7.1 +EX=$DIR/bin/rnode +$EX run -s \ + --map-size 2048576000 \ + --casper-block-store-size 2048576000 \ --required-sigs 0 \ - --map_size 2048576000 \ - --thread-pool-size 5 ##\ -## --validator-private-key \ -## ae131c0502a2ddf9a23d3f893cd842f122fa29b5530cb2967410ea3c45e7c566 + --thread-pool-size 5 \ + --bonds-file ~/.rnode/genesis/bonds.txt \ + --validator-private-key \ + 793fbe701f0292743629484ca9f2d73d7cfb8ccdd186f536768fefd997b08074 diff --git a/src/main/resources/application.conf b/src/main/resources/application.conf index e9b3d07..dbfb382 100644 --- a/src/main/resources/application.conf +++ b/src/main/resources/application.conf @@ -1,4 +1,4 @@ -coop { +coop { rchain { rsong { rsongdata.concat.size=1024 diff --git a/src/main/scala/coop/rchain/api/SongApi.scala b/src/main/scala/coop/rchain/api/SongApi.scala index e1472cb..61ccb90 100644 --- a/src/main/scala/coop/rchain/api/SongApi.scala +++ b/src/main/scala/coop/rchain/api/SongApi.scala @@ -1,7 +1,10 @@ package coop.rchain.api import cats.effect._ +import cats.effect.IO + import com.typesafe.scalalogging.Logger +import coop.rchain.domain.RSongModel.SearchModel import org.http4s.circe._ import coop.rchain.protocol.Protocol._ import coop.rchain.repo._ @@ -9,6 +12,9 @@ import org.http4s._ import org.http4s.dsl.Http4sDsl import io.circe.generic.auto._ import io.circe.syntax._ +import io.circe._ +import io.circe.parser._ +import io.circe.generic.auto._ import coop.rchain.domain._ import coop.rchain.service.moc.MocSongMetadata import coop.rchain.service.moc.MocSongMetadata.mocSongs @@ -55,6 +61,13 @@ class SongApi[F[_] : Sync](proxy: RholangProxy) extends Http4sDsl[F] { } ) + case req @ POST -> Root / music => + req.decode[String] { data => + val searchId = parse(data).toOption.get.as[SearchModel].toOption.get.id + Ok(SearchMusic.search(searchId).toOption.get.asJson) + } + + case GET -> Root / "art" / id ⇒ getMemoizedAsset(id)(proxy).fold( l => { diff --git a/src/main/scala/coop/rchain/domain/ErrorCode.scala b/src/main/scala/coop/rchain/domain/ErrorCode.scala index b7daf88..3f0a736 100644 --- a/src/main/scala/coop/rchain/domain/ErrorCode.scala +++ b/src/main/scala/coop/rchain/domain/ErrorCode.scala @@ -16,6 +16,7 @@ object ErrorCode extends Enumeration { nameNotFound, unregisteredUser, cacheLayer, + jsonError, unknown = Value } diff --git a/src/main/scala/coop/rchain/domain/RSongModel.scala b/src/main/scala/coop/rchain/domain/RSongModel.scala index 8199abc..6d579eb 100644 --- a/src/main/scala/coop/rchain/domain/RSongModel.scala +++ b/src/main/scala/coop/rchain/domain/RSongModel.scala @@ -63,5 +63,11 @@ object RSongModel { metadata: RSongMetadata, uri: String ) + case class SearchModel ( + id: String, + albumTitle: String, + songTitle: String, + artist: String + ) } diff --git a/src/main/scala/coop/rchain/protocol/ParToDecoder.scala b/src/main/scala/coop/rchain/protocol/ParToDecoder.scala index 103defb..04aec19 100644 --- a/src/main/scala/coop/rchain/protocol/ParToDecoder.scala +++ b/src/main/scala/coop/rchain/protocol/ParToDecoder.scala @@ -117,7 +117,9 @@ object ParOps { println(e) log.error(s"String2Par failed with Exception: ${e}") Left(Err(ErrorCode.nameToPar, e.getMessage, None)) - case Success(r) => Right(r) + case Success(r) => + log.info(s"rTerm: ${rTerm} Par: ${r}") + Right(r) } } } diff --git a/src/main/scala/coop/rchain/repo/RholangProxy.scala b/src/main/scala/coop/rchain/repo/RholangProxy.scala index 68fc628..cfe6879 100644 --- a/src/main/scala/coop/rchain/repo/RholangProxy.scala +++ b/src/main/scala/coop/rchain/repo/RholangProxy.scala @@ -39,8 +39,8 @@ class RholangProxy(channel: ManagedChannel) { DeployData() .withTerm(contract) .withTimestamp(System.currentTimeMillis()) - .withPhloLimit(coop.rchain.casper.protocol.PhloLimit(0)) - .withPhloPrice(coop.rchain.casper.protocol.PhloPrice(0)) + .withPhloLimit((Long.MaxValue)) + .withPhloPrice((1L)) .withNonce(0) .withFrom("0x1") ) @@ -77,7 +77,7 @@ class RholangProxy(channel: ManagedChannel) { import coop.rchain.protocol.ParOps._ def dataAtName( - rholangName: String): Either[Err, ListeningNameDataResponse] = { + rholangName: String): Either[Err, ListeningNameDataResponse] = { log.debug(s"dataAtName received name $rholangName") rholangName.asPar.flatMap(p => dataAtName(p)) } @@ -85,7 +85,7 @@ class RholangProxy(channel: ManagedChannel) { import coop.rchain.protocol.ParOps._ private def dataAtName(par: Par): Either[Err, ListeningNameDataResponse] = { log.debug(s"dataAtName received par ${PrettyPrinter().buildString(par)}") - val res = grpc.listenForDataAtName(par) + val res = grpc.listenForDataAtName(DataAtNameQuery(Int.MaxValue,Some(par))) res.status match { case "Success" => log.debug(s"dataAtName returned payload size: ${res.length}") @@ -95,5 +95,4 @@ class RholangProxy(channel: ManagedChannel) { Left(Err(ErrorCode.nameNotFound, s"${res}", None)) } } - } diff --git a/src/main/scala/coop/rchain/repo/SearchMusic.scala b/src/main/scala/coop/rchain/repo/SearchMusic.scala new file mode 100644 index 0000000..d9475a6 --- /dev/null +++ b/src/main/scala/coop/rchain/repo/SearchMusic.scala @@ -0,0 +1,31 @@ +package coop.rchain.repo + +import coop.rchain.domain.RSongModel.{RSongModel, SearchModel} +import coop.rchain.service.moc.MocSongMetadata +import io.circe.Json +import coop.rchain.domain._ +import io.circe._ +import io.circe.generic.auto._ +import io.circe.parser._ +import io.circe.syntax._ +import org.http4s.Request + +object SearchMusic { + + def search(id: String) = MocSongMetadata.getMetadata(id) + def searchJson(payload: Json) = { + + val searchModel : Either[Err, SearchModel] = + payload.as[RSongModel] match { + case d: DecodingFailure =>Left( + Err(ErrorCode.jsonError, d.message, None) ) + case s: SearchModel => Right(s) + } + searchModel.map(x => MocSongMetadata.getMetadata(x.id)) + + + } + + def searchRequest[F] = + search("Tiny Human") +} diff --git a/src/main/scala/coop/rchain/repo/SongRepo.scala b/src/main/scala/coop/rchain/repo/SongRepo.scala index a060b4f..e8ad1c4 100644 --- a/src/main/scala/coop/rchain/repo/SongRepo.scala +++ b/src/main/scala/coop/rchain/repo/SongRepo.scala @@ -18,7 +18,8 @@ object SongRepo { songId <- findByName(proxy, assetName) songIdOut = s"${songId}-${SONG_OUT}" retrieveSongArgs = s"""("$songId".hexToBytes(), "$songIdOut")""" - termToRetrieveSong = s"""@["Immersion", "retrieveSong"]!$retrieveSongArgs""" + termToRetrieveSong = + s"""@["Immersion", "retrieveSong"]!$retrieveSongArgs""" _ <- proxy.deployAndPropose(termToRetrieveSong) songData <- findByName(proxy, songIdOut) binarySongData = Base16.decode(songData) diff --git a/src/test/scala/coop/rchain/utils/HexUtilsSpec.scala b/src/test/scala/coop/rchain/utils/HexUtilsSpec.scala index bd928b4..0fe1e00 100644 --- a/src/test/scala/coop/rchain/utils/HexUtilsSpec.scala +++ b/src/test/scala/coop/rchain/utils/HexUtilsSpec.scala @@ -1,5 +1,7 @@ package coop.rchain.utils +import coop.rchain.models.Expr.ExprInstance.GString +import coop.rchain.models.Par import org.specs2._ class HexUtilsSpec extends Specification { @@ -15,4 +17,7 @@ class HexUtilsSpec extends Specification { bytes2hex(hex2bytes(data), Option("-")) === data } + def a = { + val p = Par(exprs = GString("")) + } } diff --git a/src/universal/conf/application.ini b/src/universal/conf/application.ini index 890f1a7..234e963 100644 --- a/src/universal/conf/application.ini +++ b/src/universal/conf/application.ini @@ -1,5 +1,5 @@ # Setting -X directly (-J is stripped) # -J-X --J-Xms3g --J-Xmx11g +-J-Xms1g +-J-Xmx3g