| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796379737983799380038013802380338043805380638073808380938103811381238133814381538163817381838193820382138223823382438253826382738283829383038313832383338343835383638373838383938403841384238433844384538463847384838493850385138523853385438553856385738583859386038613862386338643865386638673868386938703871387238733874387538763877387838793880388138823883388438853886388738883889389038913892389338943895389638973898389939003901390239033904390539063907390839093910391139123913391439153916391739183919392039213922392339243925392639273928392939303931393239333934393539363937393839393940394139423943394439453946394739483949395039513952395339543955395639573958395939603961396239633964396539663967396839693970397139723973397439753976397739783979398039813982398339843985398639873988398939903991399239933994399539963997399839994000400140024003400440054006400740084009401040114012401340144015401640174018401940204021402240234024402540264027402840294030403140324033403440354036403740384039404040414042404340444045404640474048404940504051405240534054405540564057405840594060406140624063406440654066406740684069407040714072407340744075407640774078407940804081408240834084408540864087408840894090409140924093409440954096409740984099410041014102410341044105410641074108410941104111411241134114411541164117411841194120412141224123412441254126412741284129413041314132413341344135413641374138413941404141414241434144414541464147414841494150415141524153415441554156415741584159416041614162416341644165416641674168416941704171417241734174417541764177417841794180418141824183418441854186418741884189419041914192419341944195419641974198419942004201420242034204420542064207420842094210421142124213421442154216421742184219422042214222422342244225422642274228422942304231423242334234423542364237423842394240424142424243424442454246424742484249425042514252425342544255425642574258425942604261426242634264426542664267426842694270427142724273427442754276427742784279428042814282428342844285428642874288428942904291429242934294429542964297429842994300430143024303430443054306430743084309431043114312431343144315431643174318431943204321432243234324432543264327432843294330433143324333433443354336433743384339434043414342434343444345434643474348434943504351435243534354435543564357435843594360436143624363436443654366436743684369437043714372437343744375437643774378437943804381438243834384438543864387438843894390439143924393439443954396439743984399440044014402440344044405440644074408440944104411441244134414441544164417441844194420442144224423442444254426442744284429443044314432443344344435443644374438443944404441444244434444444544464447444844494450445144524453445444554456445744584459446044614462446344644465446644674468446944704471447244734474447544764477447844794480448144824483448444854486448744884489449044914492449344944495449644974498449945004501450245034504450545064507450845094510451145124513451445154516451745184519452045214522452345244525452645274528452945304531453245334534453545364537453845394540454145424543454445454546454745484549455045514552455345544555455645574558455945604561456245634564456545664567456845694570457145724573457445754576457745784579458045814582458345844585458645874588458945904591459245934594459545964597459845994600460146024603460446054606460746084609461046114612461346144615461646174618461946204621462246234624462546264627462846294630463146324633463446354636463746384639464046414642464346444645464646474648464946504651465246534654465546564657465846594660466146624663466446654666466746684669467046714672467346744675467646774678467946804681468246834684468546864687468846894690469146924693469446954696469746984699470047014702470347044705470647074708470947104711471247134714471547164717471847194720472147224723472447254726472747284729473047314732473347344735473647374738473947404741474247434744474547464747474847494750475147524753475447554756475747584759476047614762476347644765476647674768476947704771477247734774477547764777477847794780478147824783478447854786478747884789479047914792479347944795479647974798479948004801480248034804480548064807480848094810481148124813481448154816481748184819482048214822482348244825482648274828482948304831483248334834483548364837483848394840484148424843484448454846484748484849485048514852485348544855485648574858485948604861486248634864486548664867486848694870487148724873487448754876487748784879488048814882488348844885488648874888488948904891489248934894489548964897489848994900490149024903490449054906490749084909491049114912491349144915491649174918491949204921492249234924492549264927492849294930493149324933493449354936493749384939494049414942494349444945494649474948494949504951495249534954495549564957495849594960496149624963496449654966496749684969497049714972497349744975497649774978497949804981498249834984498549864987498849894990499149924993499449954996499749984999500050015002500350045005500650075008500950105011501250135014501550165017501850195020502150225023502450255026502750285029503050315032503350345035503650375038503950405041504250435044504550465047504850495050505150525053505450555056505750585059506050615062506350645065506650675068506950705071507250735074507550765077507850795080508150825083508450855086508750885089509050915092509350945095509650975098509951005101510251035104510551065107510851095110511151125113511451155116511751185119512051215122512351245125512651275128512951305131513251335134513551365137513851395140514151425143514451455146514751485149515051515152515351545155515651575158515951605161516251635164516551665167516851695170517151725173517451755176517751785179518051815182518351845185518651875188518951905191519251935194519551965197519851995200520152025203520452055206520752085209521052115212521352145215521652175218521952205221522252235224522552265227522852295230523152325233523452355236523752385239524052415242524352445245524652475248524952505251525252535254525552565257525852595260526152625263526452655266526752685269527052715272527352745275527652775278527952805281528252835284528552865287528852895290529152925293529452955296529752985299530053015302530353045305530653075308530953105311531253135314531553165317531853195320532153225323532453255326532753285329533053315332533353345335533653375338533953405341534253435344534553465347534853495350535153525353535453555356535753585359536053615362536353645365536653675368536953705371537253735374537553765377537853795380538153825383538453855386538753885389539053915392539353945395539653975398539954005401540254035404540554065407540854095410541154125413541454155416541754185419542054215422542354245425542654275428542954305431543254335434543554365437543854395440544154425443544454455446544754485449545054515452545354545455545654575458545954605461546254635464546554665467546854695470547154725473547454755476547754785479548054815482548354845485548654875488548954905491549254935494549554965497549854995500550155025503550455055506550755085509551055115512551355145515551655175518551955205521552255235524552555265527552855295530553155325533553455355536553755385539554055415542554355445545554655475548554955505551555255535554555555565557555855595560556155625563556455655566556755685569557055715572557355745575557655775578557955805581558255835584558555865587558855895590559155925593559455955596559755985599560056015602560356045605560656075608560956105611561256135614561556165617561856195620562156225623562456255626562756285629563056315632563356345635563656375638563956405641564256435644564556465647564856495650565156525653565456555656565756585659566056615662566356645665566656675668566956705671567256735674567556765677567856795680568156825683568456855686568756885689569056915692569356945695569656975698569957005701570257035704570557065707570857095710571157125713571457155716571757185719572057215722572357245725572657275728572957305731573257335734573557365737573857395740574157425743574457455746574757485749575057515752575357545755575657575758575957605761576257635764576557665767576857695770577157725773577457755776577757785779578057815782578357845785578657875788578957905791579257935794579557965797579857995800580158025803580458055806580758085809581058115812581358145815581658175818581958205821582258235824582558265827582858295830583158325833583458355836583758385839584058415842584358445845584658475848584958505851585258535854585558565857585858595860586158625863586458655866586758685869587058715872587358745875587658775878587958805881588258835884588558865887588858895890589158925893589458955896589758985899590059015902590359045905590659075908590959105911591259135914591559165917591859195920592159225923592459255926592759285929593059315932593359345935593659375938593959405941594259435944594559465947594859495950595159525953595459555956595759585959596059615962596359645965596659675968596959705971597259735974597559765977597859795980598159825983598459855986598759885989599059915992599359945995599659975998599960006001600260036004600560066007600860096010601160126013601460156016601760186019602060216022602360246025602660276028602960306031603260336034603560366037603860396040604160426043604460456046604760486049605060516052605360546055605660576058605960606061606260636064606560666067606860696070607160726073607460756076607760786079608060816082608360846085608660876088608960906091609260936094609560966097609860996100610161026103610461056106610761086109611061116112611361146115611661176118611961206121612261236124612561266127612861296130613161326133613461356136613761386139614061416142614361446145614661476148614961506151615261536154615561566157615861596160616161626163616461656166616761686169617061716172617361746175617661776178617961806181618261836184618561866187618861896190619161926193619461956196619761986199620062016202620362046205620662076208620962106211621262136214621562166217621862196220622162226223622462256226622762286229623062316232623362346235623662376238623962406241624262436244624562466247624862496250625162526253625462556256625762586259626062616262626362646265626662676268626962706271627262736274627562766277627862796280628162826283628462856286628762886289629062916292629362946295629662976298629963006301630263036304630563066307630863096310631163126313631463156316631763186319632063216322632363246325632663276328632963306331633263336334633563366337633863396340634163426343634463456346634763486349635063516352635363546355635663576358635963606361636263636364636563666367636863696370637163726373637463756376637763786379638063816382638363846385638663876388638963906391639263936394639563966397639863996400640164026403640464056406640764086409641064116412641364146415641664176418641964206421642264236424642564266427642864296430643164326433643464356436643764386439644064416442644364446445644664476448644964506451645264536454645564566457645864596460646164626463646464656466646764686469647064716472647364746475647664776478647964806481648264836484648564866487648864896490649164926493649464956496649764986499650065016502650365046505650665076508650965106511651265136514651565166517651865196520652165226523652465256526652765286529653065316532653365346535653665376538653965406541654265436544654565466547654865496550655165526553655465556556655765586559656065616562656365646565656665676568656965706571657265736574657565766577657865796580658165826583658465856586658765886589659065916592659365946595659665976598659966006601660266036604660566066607660866096610661166126613661466156616661766186619662066216622662366246625662666276628662966306631663266336634663566366637663866396640664166426643664466456646664766486649665066516652665366546655665666576658665966606661666266636664666566666667666866696670667166726673667466756676667766786679668066816682668366846685668666876688668966906691669266936694669566966697669866996700670167026703670467056706670767086709671067116712671367146715671667176718671967206721672267236724672567266727672867296730673167326733673467356736673767386739674067416742674367446745674667476748674967506751675267536754675567566757675867596760676167626763676467656766676767686769677067716772677367746775677667776778677967806781678267836784678567866787678867896790679167926793679467956796679767986799680068016802680368046805680668076808680968106811681268136814681568166817681868196820682168226823682468256826682768286829683068316832683368346835683668376838683968406841684268436844684568466847684868496850685168526853685468556856685768586859686068616862686368646865686668676868686968706871687268736874687568766877687868796880688168826883688468856886688768886889689068916892689368946895689668976898689969006901690269036904690569066907690869096910691169126913691469156916691769186919692069216922692369246925692669276928692969306931693269336934693569366937693869396940694169426943694469456946694769486949695069516952695369546955695669576958695969606961696269636964696569666967696869696970697169726973697469756976697769786979698069816982698369846985698669876988698969906991699269936994699569966997699869997000700170027003700470057006700770087009701070117012701370147015701670177018701970207021702270237024702570267027702870297030703170327033703470357036703770387039704070417042704370447045704670477048704970507051705270537054705570567057705870597060706170627063706470657066706770687069707070717072707370747075707670777078707970807081708270837084708570867087708870897090709170927093709470957096709770987099710071017102710371047105710671077108710971107111711271137114711571167117711871197120712171227123712471257126712771287129713071317132713371347135713671377138713971407141714271437144714571467147714871497150715171527153715471557156715771587159716071617162716371647165716671677168716971707171717271737174717571767177717871797180718171827183718471857186718771887189719071917192719371947195719671977198719972007201720272037204720572067207720872097210721172127213721472157216721772187219722072217222722372247225722672277228722972307231723272337234723572367237723872397240724172427243724472457246724772487249725072517252725372547255725672577258725972607261726272637264726572667267726872697270727172727273727472757276727772787279728072817282728372847285728672877288728972907291729272937294729572967297729872997300730173027303730473057306730773087309731073117312731373147315731673177318731973207321732273237324732573267327732873297330733173327333733473357336733773387339734073417342734373447345734673477348734973507351735273537354735573567357735873597360736173627363736473657366736773687369737073717372737373747375737673777378737973807381738273837384738573867387738873897390739173927393739473957396739773987399740074017402740374047405740674077408740974107411741274137414741574167417741874197420742174227423742474257426742774287429743074317432743374347435743674377438743974407441744274437444744574467447744874497450745174527453745474557456745774587459746074617462746374647465746674677468746974707471747274737474747574767477747874797480748174827483748474857486748774887489749074917492749374947495749674977498749975007501750275037504750575067507750875097510751175127513751475157516751775187519752075217522752375247525752675277528752975307531753275337534 |
- // Copyright (c) 2011-present, Facebook, Inc. All rights reserved.
- // This source code is licensed under both the GPLv2 (found in the
- // COPYING file in the root directory) and Apache 2.0 License
- // (found in the LICENSE.Apache file in the root directory).
- // This file is designed for caching those frequently used IDs and provide
- // efficient portal (i.e, a set of static functions) to access java code
- // from c++.
- #ifndef JAVA_ROCKSJNI_PORTAL_H_
- #define JAVA_ROCKSJNI_PORTAL_H_
- #include <algorithm>
- #include <cstring>
- #include <functional>
- #include <iostream>
- #include <iterator>
- #include <jni.h>
- #include <limits>
- #include <memory>
- #include <string>
- #include <type_traits>
- #include <vector>
- #include "rocksdb/db.h"
- #include "rocksdb/filter_policy.h"
- #include "rocksdb/rate_limiter.h"
- #include "rocksdb/status.h"
- #include "rocksdb/table.h"
- #include "rocksdb/utilities/backupable_db.h"
- #include "rocksdb/utilities/memory_util.h"
- #include "rocksdb/utilities/transaction_db.h"
- #include "rocksdb/utilities/write_batch_with_index.h"
- #include "rocksjni/compaction_filter_factory_jnicallback.h"
- #include "rocksjni/comparatorjnicallback.h"
- #include "rocksjni/loggerjnicallback.h"
- #include "rocksjni/table_filter_jnicallback.h"
- #include "rocksjni/trace_writer_jnicallback.h"
- #include "rocksjni/transaction_notifier_jnicallback.h"
- #include "rocksjni/wal_filter_jnicallback.h"
- #include "rocksjni/writebatchhandlerjnicallback.h"
- // Remove macro on windows
- #ifdef DELETE
- #undef DELETE
- #endif
- namespace ROCKSDB_NAMESPACE {
- class JavaClass {
- public:
- /**
- * Gets and initializes a Java Class
- *
- * @param env A pointer to the Java environment
- * @param jclazz_name The fully qualified JNI name of the Java Class
- * e.g. "java/lang/String"
- *
- * @return The Java Class or nullptr if one of the
- * ClassFormatError, ClassCircularityError, NoClassDefFoundError,
- * OutOfMemoryError or ExceptionInInitializerError exceptions is thrown
- */
- static jclass getJClass(JNIEnv* env, const char* jclazz_name) {
- jclass jclazz = env->FindClass(jclazz_name);
- assert(jclazz != nullptr);
- return jclazz;
- }
- };
- // Native class template
- template<class PTR, class DERIVED> class RocksDBNativeClass : public JavaClass {
- };
- // Native class template for sub-classes of RocksMutableObject
- template<class PTR, class DERIVED> class NativeRocksMutableObject
- : public RocksDBNativeClass<PTR, DERIVED> {
- public:
- /**
- * Gets the Java Method ID for the
- * RocksMutableObject#setNativeHandle(long, boolean) method
- *
- * @param env A pointer to the Java environment
- * @return The Java Method ID or nullptr the RocksMutableObject class cannot
- * be accessed, or if one of the NoSuchMethodError,
- * ExceptionInInitializerError or OutOfMemoryError exceptions is thrown
- */
- static jmethodID getSetNativeHandleMethod(JNIEnv* env) {
- static jclass jclazz = DERIVED::getJClass(env);
- if(jclazz == nullptr) {
- return nullptr;
- }
- static jmethodID mid = env->GetMethodID(
- jclazz, "setNativeHandle", "(JZ)V");
- assert(mid != nullptr);
- return mid;
- }
- /**
- * Sets the C++ object pointer handle in the Java object
- *
- * @param env A pointer to the Java environment
- * @param jobj The Java object on which to set the pointer handle
- * @param ptr The C++ object pointer
- * @param java_owns_handle JNI_TRUE if ownership of the C++ object is
- * managed by the Java object
- *
- * @return true if a Java exception is pending, false otherwise
- */
- static bool setHandle(JNIEnv* env, jobject jobj, PTR ptr,
- jboolean java_owns_handle) {
- assert(jobj != nullptr);
- static jmethodID mid = getSetNativeHandleMethod(env);
- if(mid == nullptr) {
- return true; // signal exception
- }
- env->CallVoidMethod(jobj, mid, reinterpret_cast<jlong>(ptr), java_owns_handle);
- if(env->ExceptionCheck()) {
- return true; // signal exception
- }
- return false;
- }
- };
- // Java Exception template
- template<class DERIVED> class JavaException : public JavaClass {
- public:
- /**
- * Create and throw a java exception with the provided message
- *
- * @param env A pointer to the Java environment
- * @param msg The message for the exception
- *
- * @return true if an exception was thrown, false otherwise
- */
- static bool ThrowNew(JNIEnv* env, const std::string& msg) {
- jclass jclazz = DERIVED::getJClass(env);
- if(jclazz == nullptr) {
- // exception occurred accessing class
- std::cerr << "JavaException::ThrowNew - Error: unexpected exception!" << std::endl;
- return env->ExceptionCheck();
- }
- const jint rs = env->ThrowNew(jclazz, msg.c_str());
- if(rs != JNI_OK) {
- // exception could not be thrown
- std::cerr << "JavaException::ThrowNew - Fatal: could not throw exception!" << std::endl;
- return env->ExceptionCheck();
- }
- return true;
- }
- };
- // The portal class for java.lang.IllegalArgumentException
- class IllegalArgumentExceptionJni :
- public JavaException<IllegalArgumentExceptionJni> {
- public:
- /**
- * Get the Java Class java.lang.IllegalArgumentException
- *
- * @param env A pointer to the Java environment
- *
- * @return The Java Class or nullptr if one of the
- * ClassFormatError, ClassCircularityError, NoClassDefFoundError,
- * OutOfMemoryError or ExceptionInInitializerError exceptions is thrown
- */
- static jclass getJClass(JNIEnv* env) {
- return JavaException::getJClass(env, "java/lang/IllegalArgumentException");
- }
- /**
- * Create and throw a Java IllegalArgumentException with the provided status
- *
- * If s.ok() == true, then this function will not throw any exception.
- *
- * @param env A pointer to the Java environment
- * @param s The status for the exception
- *
- * @return true if an exception was thrown, false otherwise
- */
- static bool ThrowNew(JNIEnv* env, const Status& s) {
- assert(!s.ok());
- if (s.ok()) {
- return false;
- }
- // get the IllegalArgumentException class
- jclass jclazz = getJClass(env);
- if(jclazz == nullptr) {
- // exception occurred accessing class
- std::cerr << "IllegalArgumentExceptionJni::ThrowNew/class - Error: unexpected exception!" << std::endl;
- return env->ExceptionCheck();
- }
- return JavaException::ThrowNew(env, s.ToString());
- }
- };
- // The portal class for org.rocksdb.Status.Code
- class CodeJni : public JavaClass {
- public:
- /**
- * Get the Java Class org.rocksdb.Status.Code
- *
- * @param env A pointer to the Java environment
- *
- * @return The Java Class or nullptr if one of the
- * ClassFormatError, ClassCircularityError, NoClassDefFoundError,
- * OutOfMemoryError or ExceptionInInitializerError exceptions is thrown
- */
- static jclass getJClass(JNIEnv* env) {
- return JavaClass::getJClass(env, "org/rocksdb/Status$Code");
- }
- /**
- * Get the Java Method: Status.Code#getValue
- *
- * @param env A pointer to the Java environment
- *
- * @return The Java Method ID or nullptr if the class or method id could not
- * be retieved
- */
- static jmethodID getValueMethod(JNIEnv* env) {
- jclass jclazz = getJClass(env);
- if(jclazz == nullptr) {
- // exception occurred accessing class
- return nullptr;
- }
- static jmethodID mid =
- env->GetMethodID(jclazz, "getValue", "()b");
- assert(mid != nullptr);
- return mid;
- }
- };
- // The portal class for org.rocksdb.Status.SubCode
- class SubCodeJni : public JavaClass {
- public:
- /**
- * Get the Java Class org.rocksdb.Status.SubCode
- *
- * @param env A pointer to the Java environment
- *
- * @return The Java Class or nullptr if one of the
- * ClassFormatError, ClassCircularityError, NoClassDefFoundError,
- * OutOfMemoryError or ExceptionInInitializerError exceptions is thrown
- */
- static jclass getJClass(JNIEnv* env) {
- return JavaClass::getJClass(env, "org/rocksdb/Status$SubCode");
- }
- /**
- * Get the Java Method: Status.SubCode#getValue
- *
- * @param env A pointer to the Java environment
- *
- * @return The Java Method ID or nullptr if the class or method id could not
- * be retieved
- */
- static jmethodID getValueMethod(JNIEnv* env) {
- jclass jclazz = getJClass(env);
- if(jclazz == nullptr) {
- // exception occurred accessing class
- return nullptr;
- }
- static jmethodID mid =
- env->GetMethodID(jclazz, "getValue", "()b");
- assert(mid != nullptr);
- return mid;
- }
- static ROCKSDB_NAMESPACE::Status::SubCode toCppSubCode(
- const jbyte jsub_code) {
- switch (jsub_code) {
- case 0x0:
- return ROCKSDB_NAMESPACE::Status::SubCode::kNone;
- case 0x1:
- return ROCKSDB_NAMESPACE::Status::SubCode::kMutexTimeout;
- case 0x2:
- return ROCKSDB_NAMESPACE::Status::SubCode::kLockTimeout;
- case 0x3:
- return ROCKSDB_NAMESPACE::Status::SubCode::kLockLimit;
- case 0x4:
- return ROCKSDB_NAMESPACE::Status::SubCode::kNoSpace;
- case 0x5:
- return ROCKSDB_NAMESPACE::Status::SubCode::kDeadlock;
- case 0x6:
- return ROCKSDB_NAMESPACE::Status::SubCode::kStaleFile;
- case 0x7:
- return ROCKSDB_NAMESPACE::Status::SubCode::kMemoryLimit;
- case 0x7F:
- default:
- return ROCKSDB_NAMESPACE::Status::SubCode::kNone;
- }
- }
- };
- // The portal class for org.rocksdb.Status
- class StatusJni
- : public RocksDBNativeClass<ROCKSDB_NAMESPACE::Status*, StatusJni> {
- public:
- /**
- * Get the Java Class org.rocksdb.Status
- *
- * @param env A pointer to the Java environment
- *
- * @return The Java Class or nullptr if one of the
- * ClassFormatError, ClassCircularityError, NoClassDefFoundError,
- * OutOfMemoryError or ExceptionInInitializerError exceptions is thrown
- */
- static jclass getJClass(JNIEnv* env) {
- return RocksDBNativeClass::getJClass(env, "org/rocksdb/Status");
- }
- /**
- * Get the Java Method: Status#getCode
- *
- * @param env A pointer to the Java environment
- *
- * @return The Java Method ID or nullptr if the class or method id could not
- * be retieved
- */
- static jmethodID getCodeMethod(JNIEnv* env) {
- jclass jclazz = getJClass(env);
- if(jclazz == nullptr) {
- // exception occurred accessing class
- return nullptr;
- }
- static jmethodID mid =
- env->GetMethodID(jclazz, "getCode", "()Lorg/rocksdb/Status$Code;");
- assert(mid != nullptr);
- return mid;
- }
- /**
- * Get the Java Method: Status#getSubCode
- *
- * @param env A pointer to the Java environment
- *
- * @return The Java Method ID or nullptr if the class or method id could not
- * be retieved
- */
- static jmethodID getSubCodeMethod(JNIEnv* env) {
- jclass jclazz = getJClass(env);
- if(jclazz == nullptr) {
- // exception occurred accessing class
- return nullptr;
- }
- static jmethodID mid =
- env->GetMethodID(jclazz, "getSubCode", "()Lorg/rocksdb/Status$SubCode;");
- assert(mid != nullptr);
- return mid;
- }
- /**
- * Get the Java Method: Status#getState
- *
- * @param env A pointer to the Java environment
- *
- * @return The Java Method ID or nullptr if the class or method id could not
- * be retieved
- */
- static jmethodID getStateMethod(JNIEnv* env) {
- jclass jclazz = getJClass(env);
- if(jclazz == nullptr) {
- // exception occurred accessing class
- return nullptr;
- }
- static jmethodID mid =
- env->GetMethodID(jclazz, "getState", "()Ljava/lang/String;");
- assert(mid != nullptr);
- return mid;
- }
- /**
- * Create a new Java org.rocksdb.Status object with the same properties as
- * the provided C++ ROCKSDB_NAMESPACE::Status object
- *
- * @param env A pointer to the Java environment
- * @param status The ROCKSDB_NAMESPACE::Status object
- *
- * @return A reference to a Java org.rocksdb.Status object, or nullptr
- * if an an exception occurs
- */
- static jobject construct(JNIEnv* env, const Status& status) {
- jclass jclazz = getJClass(env);
- if(jclazz == nullptr) {
- // exception occurred accessing class
- return nullptr;
- }
- jmethodID mid =
- env->GetMethodID(jclazz, "<init>", "(BBLjava/lang/String;)V");
- if(mid == nullptr) {
- // exception thrown: NoSuchMethodException or OutOfMemoryError
- return nullptr;
- }
- // convert the Status state for Java
- jstring jstate = nullptr;
- if (status.getState() != nullptr) {
- const char* const state = status.getState();
- jstate = env->NewStringUTF(state);
- if(env->ExceptionCheck()) {
- if(jstate != nullptr) {
- env->DeleteLocalRef(jstate);
- }
- return nullptr;
- }
- }
- jobject jstatus =
- env->NewObject(jclazz, mid, toJavaStatusCode(status.code()),
- toJavaStatusSubCode(status.subcode()), jstate);
- if(env->ExceptionCheck()) {
- // exception occurred
- if(jstate != nullptr) {
- env->DeleteLocalRef(jstate);
- }
- return nullptr;
- }
- if(jstate != nullptr) {
- env->DeleteLocalRef(jstate);
- }
- return jstatus;
- }
- // Returns the equivalent org.rocksdb.Status.Code for the provided
- // C++ ROCKSDB_NAMESPACE::Status::Code enum
- static jbyte toJavaStatusCode(const ROCKSDB_NAMESPACE::Status::Code& code) {
- switch (code) {
- case ROCKSDB_NAMESPACE::Status::Code::kOk:
- return 0x0;
- case ROCKSDB_NAMESPACE::Status::Code::kNotFound:
- return 0x1;
- case ROCKSDB_NAMESPACE::Status::Code::kCorruption:
- return 0x2;
- case ROCKSDB_NAMESPACE::Status::Code::kNotSupported:
- return 0x3;
- case ROCKSDB_NAMESPACE::Status::Code::kInvalidArgument:
- return 0x4;
- case ROCKSDB_NAMESPACE::Status::Code::kIOError:
- return 0x5;
- case ROCKSDB_NAMESPACE::Status::Code::kMergeInProgress:
- return 0x6;
- case ROCKSDB_NAMESPACE::Status::Code::kIncomplete:
- return 0x7;
- case ROCKSDB_NAMESPACE::Status::Code::kShutdownInProgress:
- return 0x8;
- case ROCKSDB_NAMESPACE::Status::Code::kTimedOut:
- return 0x9;
- case ROCKSDB_NAMESPACE::Status::Code::kAborted:
- return 0xA;
- case ROCKSDB_NAMESPACE::Status::Code::kBusy:
- return 0xB;
- case ROCKSDB_NAMESPACE::Status::Code::kExpired:
- return 0xC;
- case ROCKSDB_NAMESPACE::Status::Code::kTryAgain:
- return 0xD;
- case ROCKSDB_NAMESPACE::Status::Code::kColumnFamilyDropped:
- return 0xE;
- default:
- return 0x7F; // undefined
- }
- }
- // Returns the equivalent org.rocksdb.Status.SubCode for the provided
- // C++ ROCKSDB_NAMESPACE::Status::SubCode enum
- static jbyte toJavaStatusSubCode(
- const ROCKSDB_NAMESPACE::Status::SubCode& subCode) {
- switch (subCode) {
- case ROCKSDB_NAMESPACE::Status::SubCode::kNone:
- return 0x0;
- case ROCKSDB_NAMESPACE::Status::SubCode::kMutexTimeout:
- return 0x1;
- case ROCKSDB_NAMESPACE::Status::SubCode::kLockTimeout:
- return 0x2;
- case ROCKSDB_NAMESPACE::Status::SubCode::kLockLimit:
- return 0x3;
- case ROCKSDB_NAMESPACE::Status::SubCode::kNoSpace:
- return 0x4;
- case ROCKSDB_NAMESPACE::Status::SubCode::kDeadlock:
- return 0x5;
- case ROCKSDB_NAMESPACE::Status::SubCode::kStaleFile:
- return 0x6;
- case ROCKSDB_NAMESPACE::Status::SubCode::kMemoryLimit:
- return 0x7;
- default:
- return 0x7F; // undefined
- }
- }
- static std::unique_ptr<ROCKSDB_NAMESPACE::Status> toCppStatus(
- const jbyte jcode_value, const jbyte jsub_code_value) {
- std::unique_ptr<ROCKSDB_NAMESPACE::Status> status;
- switch (jcode_value) {
- case 0x0:
- //Ok
- status = std::unique_ptr<ROCKSDB_NAMESPACE::Status>(
- new ROCKSDB_NAMESPACE::Status(ROCKSDB_NAMESPACE::Status::OK()));
- break;
- case 0x1:
- //NotFound
- status = std::unique_ptr<ROCKSDB_NAMESPACE::Status>(
- new ROCKSDB_NAMESPACE::Status(ROCKSDB_NAMESPACE::Status::NotFound(
- ROCKSDB_NAMESPACE::SubCodeJni::toCppSubCode(jsub_code_value))));
- break;
- case 0x2:
- //Corruption
- status = std::unique_ptr<ROCKSDB_NAMESPACE::Status>(
- new ROCKSDB_NAMESPACE::Status(ROCKSDB_NAMESPACE::Status::Corruption(
- ROCKSDB_NAMESPACE::SubCodeJni::toCppSubCode(jsub_code_value))));
- break;
- case 0x3:
- //NotSupported
- status = std::unique_ptr<ROCKSDB_NAMESPACE::Status>(
- new ROCKSDB_NAMESPACE::Status(
- ROCKSDB_NAMESPACE::Status::NotSupported(
- ROCKSDB_NAMESPACE::SubCodeJni::toCppSubCode(
- jsub_code_value))));
- break;
- case 0x4:
- //InvalidArgument
- status = std::unique_ptr<ROCKSDB_NAMESPACE::Status>(
- new ROCKSDB_NAMESPACE::Status(
- ROCKSDB_NAMESPACE::Status::InvalidArgument(
- ROCKSDB_NAMESPACE::SubCodeJni::toCppSubCode(
- jsub_code_value))));
- break;
- case 0x5:
- //IOError
- status = std::unique_ptr<ROCKSDB_NAMESPACE::Status>(
- new ROCKSDB_NAMESPACE::Status(ROCKSDB_NAMESPACE::Status::IOError(
- ROCKSDB_NAMESPACE::SubCodeJni::toCppSubCode(jsub_code_value))));
- break;
- case 0x6:
- //MergeInProgress
- status = std::unique_ptr<ROCKSDB_NAMESPACE::Status>(
- new ROCKSDB_NAMESPACE::Status(
- ROCKSDB_NAMESPACE::Status::MergeInProgress(
- ROCKSDB_NAMESPACE::SubCodeJni::toCppSubCode(
- jsub_code_value))));
- break;
- case 0x7:
- //Incomplete
- status = std::unique_ptr<ROCKSDB_NAMESPACE::Status>(
- new ROCKSDB_NAMESPACE::Status(ROCKSDB_NAMESPACE::Status::Incomplete(
- ROCKSDB_NAMESPACE::SubCodeJni::toCppSubCode(jsub_code_value))));
- break;
- case 0x8:
- //ShutdownInProgress
- status = std::unique_ptr<ROCKSDB_NAMESPACE::Status>(
- new ROCKSDB_NAMESPACE::Status(
- ROCKSDB_NAMESPACE::Status::ShutdownInProgress(
- ROCKSDB_NAMESPACE::SubCodeJni::toCppSubCode(
- jsub_code_value))));
- break;
- case 0x9:
- //TimedOut
- status = std::unique_ptr<ROCKSDB_NAMESPACE::Status>(
- new ROCKSDB_NAMESPACE::Status(ROCKSDB_NAMESPACE::Status::TimedOut(
- ROCKSDB_NAMESPACE::SubCodeJni::toCppSubCode(jsub_code_value))));
- break;
- case 0xA:
- //Aborted
- status = std::unique_ptr<ROCKSDB_NAMESPACE::Status>(
- new ROCKSDB_NAMESPACE::Status(ROCKSDB_NAMESPACE::Status::Aborted(
- ROCKSDB_NAMESPACE::SubCodeJni::toCppSubCode(jsub_code_value))));
- break;
- case 0xB:
- //Busy
- status = std::unique_ptr<ROCKSDB_NAMESPACE::Status>(
- new ROCKSDB_NAMESPACE::Status(ROCKSDB_NAMESPACE::Status::Busy(
- ROCKSDB_NAMESPACE::SubCodeJni::toCppSubCode(jsub_code_value))));
- break;
- case 0xC:
- //Expired
- status = std::unique_ptr<ROCKSDB_NAMESPACE::Status>(
- new ROCKSDB_NAMESPACE::Status(ROCKSDB_NAMESPACE::Status::Expired(
- ROCKSDB_NAMESPACE::SubCodeJni::toCppSubCode(jsub_code_value))));
- break;
- case 0xD:
- //TryAgain
- status = std::unique_ptr<ROCKSDB_NAMESPACE::Status>(
- new ROCKSDB_NAMESPACE::Status(ROCKSDB_NAMESPACE::Status::TryAgain(
- ROCKSDB_NAMESPACE::SubCodeJni::toCppSubCode(jsub_code_value))));
- break;
- case 0xE:
- // ColumnFamilyDropped
- status = std::unique_ptr<ROCKSDB_NAMESPACE::Status>(
- new ROCKSDB_NAMESPACE::Status(
- ROCKSDB_NAMESPACE::Status::ColumnFamilyDropped(
- ROCKSDB_NAMESPACE::SubCodeJni::toCppSubCode(
- jsub_code_value))));
- break;
- case 0x7F:
- default:
- return nullptr;
- }
- return status;
- }
- // Returns the equivalent ROCKSDB_NAMESPACE::Status for the Java
- // org.rocksdb.Status
- static std::unique_ptr<ROCKSDB_NAMESPACE::Status> toCppStatus(
- JNIEnv* env, const jobject jstatus) {
- jmethodID mid_code = getCodeMethod(env);
- if (mid_code == nullptr) {
- // exception occurred
- return nullptr;
- }
- jobject jcode = env->CallObjectMethod(jstatus, mid_code);
- if (env->ExceptionCheck()) {
- // exception occurred
- return nullptr;
- }
- jmethodID mid_code_value = ROCKSDB_NAMESPACE::CodeJni::getValueMethod(env);
- if (mid_code_value == nullptr) {
- // exception occurred
- return nullptr;
- }
- jbyte jcode_value = env->CallByteMethod(jcode, mid_code_value);
- if (env->ExceptionCheck()) {
- // exception occurred
- if (jcode != nullptr) {
- env->DeleteLocalRef(jcode);
- }
- return nullptr;
- }
- jmethodID mid_subCode = getSubCodeMethod(env);
- if (mid_subCode == nullptr) {
- // exception occurred
- return nullptr;
- }
- jobject jsubCode = env->CallObjectMethod(jstatus, mid_subCode);
- if (env->ExceptionCheck()) {
- // exception occurred
- if (jcode != nullptr) {
- env->DeleteLocalRef(jcode);
- }
- return nullptr;
- }
- jbyte jsub_code_value = 0x0; // None
- if (jsubCode != nullptr) {
- jmethodID mid_subCode_value =
- ROCKSDB_NAMESPACE::SubCodeJni::getValueMethod(env);
- if (mid_subCode_value == nullptr) {
- // exception occurred
- return nullptr;
- }
- jsub_code_value = env->CallByteMethod(jsubCode, mid_subCode_value);
- if (env->ExceptionCheck()) {
- // exception occurred
- if (jcode != nullptr) {
- env->DeleteLocalRef(jcode);
- }
- return nullptr;
- }
- }
- jmethodID mid_state = getStateMethod(env);
- if (mid_state == nullptr) {
- // exception occurred
- return nullptr;
- }
- jobject jstate = env->CallObjectMethod(jstatus, mid_state);
- if (env->ExceptionCheck()) {
- // exception occurred
- if (jsubCode != nullptr) {
- env->DeleteLocalRef(jsubCode);
- }
- if (jcode != nullptr) {
- env->DeleteLocalRef(jcode);
- }
- return nullptr;
- }
- std::unique_ptr<ROCKSDB_NAMESPACE::Status> status =
- toCppStatus(jcode_value, jsub_code_value);
- // delete all local refs
- if (jstate != nullptr) {
- env->DeleteLocalRef(jstate);
- }
- if (jsubCode != nullptr) {
- env->DeleteLocalRef(jsubCode);
- }
- if (jcode != nullptr) {
- env->DeleteLocalRef(jcode);
- }
- return status;
- }
- };
- // The portal class for org.rocksdb.RocksDBException
- class RocksDBExceptionJni :
- public JavaException<RocksDBExceptionJni> {
- public:
- /**
- * Get the Java Class org.rocksdb.RocksDBException
- *
- * @param env A pointer to the Java environment
- *
- * @return The Java Class or nullptr if one of the
- * ClassFormatError, ClassCircularityError, NoClassDefFoundError,
- * OutOfMemoryError or ExceptionInInitializerError exceptions is thrown
- */
- static jclass getJClass(JNIEnv* env) {
- return JavaException::getJClass(env, "org/rocksdb/RocksDBException");
- }
- /**
- * Create and throw a Java RocksDBException with the provided message
- *
- * @param env A pointer to the Java environment
- * @param msg The message for the exception
- *
- * @return true if an exception was thrown, false otherwise
- */
- static bool ThrowNew(JNIEnv* env, const std::string& msg) {
- return JavaException::ThrowNew(env, msg);
- }
- /**
- * Create and throw a Java RocksDBException with the provided status
- *
- * If s->ok() == true, then this function will not throw any exception.
- *
- * @param env A pointer to the Java environment
- * @param s The status for the exception
- *
- * @return true if an exception was thrown, false otherwise
- */
- static bool ThrowNew(JNIEnv* env, std::unique_ptr<Status>& s) {
- return ROCKSDB_NAMESPACE::RocksDBExceptionJni::ThrowNew(env, *(s.get()));
- }
- /**
- * Create and throw a Java RocksDBException with the provided status
- *
- * If s.ok() == true, then this function will not throw any exception.
- *
- * @param env A pointer to the Java environment
- * @param s The status for the exception
- *
- * @return true if an exception was thrown, false otherwise
- */
- static bool ThrowNew(JNIEnv* env, const Status& s) {
- if (s.ok()) {
- return false;
- }
- // get the RocksDBException class
- jclass jclazz = getJClass(env);
- if(jclazz == nullptr) {
- // exception occurred accessing class
- std::cerr << "RocksDBExceptionJni::ThrowNew/class - Error: unexpected exception!" << std::endl;
- return env->ExceptionCheck();
- }
- // get the constructor of org.rocksdb.RocksDBException
- jmethodID mid =
- env->GetMethodID(jclazz, "<init>", "(Lorg/rocksdb/Status;)V");
- if(mid == nullptr) {
- // exception thrown: NoSuchMethodException or OutOfMemoryError
- std::cerr << "RocksDBExceptionJni::ThrowNew/cstr - Error: unexpected exception!" << std::endl;
- return env->ExceptionCheck();
- }
- // get the Java status object
- jobject jstatus = StatusJni::construct(env, s);
- if(jstatus == nullptr) {
- // exception occcurred
- std::cerr << "RocksDBExceptionJni::ThrowNew/StatusJni - Error: unexpected exception!" << std::endl;
- return env->ExceptionCheck();
- }
- // construct the RocksDBException
- jthrowable rocksdb_exception = reinterpret_cast<jthrowable>(env->NewObject(jclazz, mid, jstatus));
- if(env->ExceptionCheck()) {
- if(jstatus != nullptr) {
- env->DeleteLocalRef(jstatus);
- }
- if(rocksdb_exception != nullptr) {
- env->DeleteLocalRef(rocksdb_exception);
- }
- std::cerr << "RocksDBExceptionJni::ThrowNew/NewObject - Error: unexpected exception!" << std::endl;
- return true;
- }
- // throw the RocksDBException
- const jint rs = env->Throw(rocksdb_exception);
- if(rs != JNI_OK) {
- // exception could not be thrown
- std::cerr << "RocksDBExceptionJni::ThrowNew - Fatal: could not throw exception!" << std::endl;
- if(jstatus != nullptr) {
- env->DeleteLocalRef(jstatus);
- }
- if(rocksdb_exception != nullptr) {
- env->DeleteLocalRef(rocksdb_exception);
- }
- return env->ExceptionCheck();
- }
- if(jstatus != nullptr) {
- env->DeleteLocalRef(jstatus);
- }
- if(rocksdb_exception != nullptr) {
- env->DeleteLocalRef(rocksdb_exception);
- }
- return true;
- }
- /**
- * Create and throw a Java RocksDBException with the provided message
- * and status
- *
- * If s.ok() == true, then this function will not throw any exception.
- *
- * @param env A pointer to the Java environment
- * @param msg The message for the exception
- * @param s The status for the exception
- *
- * @return true if an exception was thrown, false otherwise
- */
- static bool ThrowNew(JNIEnv* env, const std::string& msg, const Status& s) {
- assert(!s.ok());
- if (s.ok()) {
- return false;
- }
- // get the RocksDBException class
- jclass jclazz = getJClass(env);
- if(jclazz == nullptr) {
- // exception occurred accessing class
- std::cerr << "RocksDBExceptionJni::ThrowNew/class - Error: unexpected exception!" << std::endl;
- return env->ExceptionCheck();
- }
- // get the constructor of org.rocksdb.RocksDBException
- jmethodID mid =
- env->GetMethodID(jclazz, "<init>", "(Ljava/lang/String;Lorg/rocksdb/Status;)V");
- if(mid == nullptr) {
- // exception thrown: NoSuchMethodException or OutOfMemoryError
- std::cerr << "RocksDBExceptionJni::ThrowNew/cstr - Error: unexpected exception!" << std::endl;
- return env->ExceptionCheck();
- }
- jstring jmsg = env->NewStringUTF(msg.c_str());
- if(jmsg == nullptr) {
- // exception thrown: OutOfMemoryError
- std::cerr << "RocksDBExceptionJni::ThrowNew/msg - Error: unexpected exception!" << std::endl;
- return env->ExceptionCheck();
- }
- // get the Java status object
- jobject jstatus = StatusJni::construct(env, s);
- if(jstatus == nullptr) {
- // exception occcurred
- std::cerr << "RocksDBExceptionJni::ThrowNew/StatusJni - Error: unexpected exception!" << std::endl;
- if(jmsg != nullptr) {
- env->DeleteLocalRef(jmsg);
- }
- return env->ExceptionCheck();
- }
- // construct the RocksDBException
- jthrowable rocksdb_exception = reinterpret_cast<jthrowable>(env->NewObject(jclazz, mid, jmsg, jstatus));
- if(env->ExceptionCheck()) {
- if(jstatus != nullptr) {
- env->DeleteLocalRef(jstatus);
- }
- if(jmsg != nullptr) {
- env->DeleteLocalRef(jmsg);
- }
- if(rocksdb_exception != nullptr) {
- env->DeleteLocalRef(rocksdb_exception);
- }
- std::cerr << "RocksDBExceptionJni::ThrowNew/NewObject - Error: unexpected exception!" << std::endl;
- return true;
- }
- // throw the RocksDBException
- const jint rs = env->Throw(rocksdb_exception);
- if(rs != JNI_OK) {
- // exception could not be thrown
- std::cerr << "RocksDBExceptionJni::ThrowNew - Fatal: could not throw exception!" << std::endl;
- if(jstatus != nullptr) {
- env->DeleteLocalRef(jstatus);
- }
- if(jmsg != nullptr) {
- env->DeleteLocalRef(jmsg);
- }
- if(rocksdb_exception != nullptr) {
- env->DeleteLocalRef(rocksdb_exception);
- }
- return env->ExceptionCheck();
- }
- if(jstatus != nullptr) {
- env->DeleteLocalRef(jstatus);
- }
- if(jmsg != nullptr) {
- env->DeleteLocalRef(jmsg);
- }
- if(rocksdb_exception != nullptr) {
- env->DeleteLocalRef(rocksdb_exception);
- }
- return true;
- }
- /**
- * Get the Java Method: RocksDBException#getStatus
- *
- * @param env A pointer to the Java environment
- *
- * @return The Java Method ID or nullptr if the class or method id could not
- * be retieved
- */
- static jmethodID getStatusMethod(JNIEnv* env) {
- jclass jclazz = getJClass(env);
- if(jclazz == nullptr) {
- // exception occurred accessing class
- return nullptr;
- }
- static jmethodID mid =
- env->GetMethodID(jclazz, "getStatus", "()Lorg/rocksdb/Status;");
- assert(mid != nullptr);
- return mid;
- }
- static std::unique_ptr<ROCKSDB_NAMESPACE::Status> toCppStatus(
- JNIEnv* env, jthrowable jrocksdb_exception) {
- if(!env->IsInstanceOf(jrocksdb_exception, getJClass(env))) {
- // not an instance of RocksDBException
- return nullptr;
- }
- // get the java status object
- jmethodID mid = getStatusMethod(env);
- if(mid == nullptr) {
- // exception occurred accessing class or method
- return nullptr;
- }
- jobject jstatus = env->CallObjectMethod(jrocksdb_exception, mid);
- if(env->ExceptionCheck()) {
- // exception occurred
- return nullptr;
- }
- if(jstatus == nullptr) {
- return nullptr; // no status available
- }
- return ROCKSDB_NAMESPACE::StatusJni::toCppStatus(env, jstatus);
- }
- };
- // The portal class for java.util.List
- class ListJni : public JavaClass {
- public:
- /**
- * Get the Java Class java.util.List
- *
- * @param env A pointer to the Java environment
- *
- * @return The Java Class or nullptr if one of the
- * ClassFormatError, ClassCircularityError, NoClassDefFoundError,
- * OutOfMemoryError or ExceptionInInitializerError exceptions is thrown
- */
- static jclass getListClass(JNIEnv* env) {
- return JavaClass::getJClass(env, "java/util/List");
- }
- /**
- * Get the Java Class java.util.ArrayList
- *
- * @param env A pointer to the Java environment
- *
- * @return The Java Class or nullptr if one of the
- * ClassFormatError, ClassCircularityError, NoClassDefFoundError,
- * OutOfMemoryError or ExceptionInInitializerError exceptions is thrown
- */
- static jclass getArrayListClass(JNIEnv* env) {
- return JavaClass::getJClass(env, "java/util/ArrayList");
- }
- /**
- * Get the Java Class java.util.Iterator
- *
- * @param env A pointer to the Java environment
- *
- * @return The Java Class or nullptr if one of the
- * ClassFormatError, ClassCircularityError, NoClassDefFoundError,
- * OutOfMemoryError or ExceptionInInitializerError exceptions is thrown
- */
- static jclass getIteratorClass(JNIEnv* env) {
- return JavaClass::getJClass(env, "java/util/Iterator");
- }
- /**
- * Get the Java Method: List#iterator
- *
- * @param env A pointer to the Java environment
- *
- * @return The Java Method ID or nullptr if the class or method id could not
- * be retieved
- */
- static jmethodID getIteratorMethod(JNIEnv* env) {
- jclass jlist_clazz = getListClass(env);
- if(jlist_clazz == nullptr) {
- // exception occurred accessing class
- return nullptr;
- }
- static jmethodID mid =
- env->GetMethodID(jlist_clazz, "iterator", "()Ljava/util/Iterator;");
- assert(mid != nullptr);
- return mid;
- }
- /**
- * Get the Java Method: Iterator#hasNext
- *
- * @param env A pointer to the Java environment
- *
- * @return The Java Method ID or nullptr if the class or method id could not
- * be retieved
- */
- static jmethodID getHasNextMethod(JNIEnv* env) {
- jclass jiterator_clazz = getIteratorClass(env);
- if(jiterator_clazz == nullptr) {
- // exception occurred accessing class
- return nullptr;
- }
- static jmethodID mid = env->GetMethodID(jiterator_clazz, "hasNext", "()Z");
- assert(mid != nullptr);
- return mid;
- }
- /**
- * Get the Java Method: Iterator#next
- *
- * @param env A pointer to the Java environment
- *
- * @return The Java Method ID or nullptr if the class or method id could not
- * be retieved
- */
- static jmethodID getNextMethod(JNIEnv* env) {
- jclass jiterator_clazz = getIteratorClass(env);
- if(jiterator_clazz == nullptr) {
- // exception occurred accessing class
- return nullptr;
- }
- static jmethodID mid =
- env->GetMethodID(jiterator_clazz, "next", "()Ljava/lang/Object;");
- assert(mid != nullptr);
- return mid;
- }
- /**
- * Get the Java Method: ArrayList constructor
- *
- * @param env A pointer to the Java environment
- *
- * @return The Java Method ID or nullptr if the class or method id could not
- * be retieved
- */
- static jmethodID getArrayListConstructorMethodId(JNIEnv* env) {
- jclass jarray_list_clazz = getArrayListClass(env);
- if(jarray_list_clazz == nullptr) {
- // exception occurred accessing class
- return nullptr;
- }
- static jmethodID mid =
- env->GetMethodID(jarray_list_clazz, "<init>", "(I)V");
- assert(mid != nullptr);
- return mid;
- }
- /**
- * Get the Java Method: List#add
- *
- * @param env A pointer to the Java environment
- *
- * @return The Java Method ID or nullptr if the class or method id could not
- * be retieved
- */
- static jmethodID getListAddMethodId(JNIEnv* env) {
- jclass jlist_clazz = getListClass(env);
- if(jlist_clazz == nullptr) {
- // exception occurred accessing class
- return nullptr;
- }
- static jmethodID mid =
- env->GetMethodID(jlist_clazz, "add", "(Ljava/lang/Object;)Z");
- assert(mid != nullptr);
- return mid;
- }
- };
- // The portal class for java.lang.Byte
- class ByteJni : public JavaClass {
- public:
- /**
- * Get the Java Class java.lang.Byte
- *
- * @param env A pointer to the Java environment
- *
- * @return The Java Class or nullptr if one of the
- * ClassFormatError, ClassCircularityError, NoClassDefFoundError,
- * OutOfMemoryError or ExceptionInInitializerError exceptions is thrown
- */
- static jclass getJClass(JNIEnv* env) {
- return JavaClass::getJClass(env, "java/lang/Byte");
- }
- /**
- * Get the Java Class byte[]
- *
- * @param env A pointer to the Java environment
- *
- * @return The Java Class or nullptr if one of the
- * ClassFormatError, ClassCircularityError, NoClassDefFoundError,
- * OutOfMemoryError or ExceptionInInitializerError exceptions is thrown
- */
- static jclass getArrayJClass(JNIEnv* env) {
- return JavaClass::getJClass(env, "[B");
- }
- /**
- * Creates a new 2-dimensional Java Byte Array byte[][]
- *
- * @param env A pointer to the Java environment
- * @param len The size of the first dimension
- *
- * @return A reference to the Java byte[][] or nullptr if an exception occurs
- */
- static jobjectArray new2dByteArray(JNIEnv* env, const jsize len) {
- jclass clazz = getArrayJClass(env);
- if(clazz == nullptr) {
- // exception occurred accessing class
- return nullptr;
- }
- return env->NewObjectArray(len, clazz, nullptr);
- }
- /**
- * Get the Java Method: Byte#byteValue
- *
- * @param env A pointer to the Java environment
- *
- * @return The Java Method ID or nullptr if the class or method id could not
- * be retrieved
- */
- static jmethodID getByteValueMethod(JNIEnv* env) {
- jclass clazz = getJClass(env);
- if(clazz == nullptr) {
- // exception occurred accessing class
- return nullptr;
- }
- static jmethodID mid = env->GetMethodID(clazz, "byteValue", "()B");
- assert(mid != nullptr);
- return mid;
- }
- /**
- * Calls the Java Method: Byte#valueOf, returning a constructed Byte jobject
- *
- * @param env A pointer to the Java environment
- *
- * @return A constructing Byte object or nullptr if the class or method id could not
- * be retrieved, or an exception occurred
- */
- static jobject valueOf(JNIEnv* env, jbyte jprimitive_byte) {
- jclass clazz = getJClass(env);
- if (clazz == nullptr) {
- // exception occurred accessing class
- return nullptr;
- }
- static jmethodID mid =
- env->GetStaticMethodID(clazz, "valueOf", "(B)Ljava/lang/Byte;");
- if (mid == nullptr) {
- // exception thrown: NoSuchMethodException or OutOfMemoryError
- return nullptr;
- }
- const jobject jbyte_obj =
- env->CallStaticObjectMethod(clazz, mid, jprimitive_byte);
- if (env->ExceptionCheck()) {
- // exception occurred
- return nullptr;
- }
- return jbyte_obj;
- }
- };
- // The portal class for java.nio.ByteBuffer
- class ByteBufferJni : public JavaClass {
- public:
- /**
- * Get the Java Class java.nio.ByteBuffer
- *
- * @param env A pointer to the Java environment
- *
- * @return The Java Class or nullptr if one of the
- * ClassFormatError, ClassCircularityError, NoClassDefFoundError,
- * OutOfMemoryError or ExceptionInInitializerError exceptions is thrown
- */
- static jclass getJClass(JNIEnv* env) {
- return JavaClass::getJClass(env, "java/nio/ByteBuffer");
- }
- /**
- * Get the Java Method: ByteBuffer#allocate
- *
- * @param env A pointer to the Java environment
- * @param jbytebuffer_clazz if you have a reference to a ByteBuffer class, or nullptr
- *
- * @return The Java Method ID or nullptr if the class or method id could not
- * be retieved
- */
- static jmethodID getAllocateMethodId(JNIEnv* env,
- jclass jbytebuffer_clazz = nullptr) {
- const jclass jclazz =
- jbytebuffer_clazz == nullptr ? getJClass(env) : jbytebuffer_clazz;
- if (jclazz == nullptr) {
- // exception occurred accessing class
- return nullptr;
- }
- static jmethodID mid = env->GetStaticMethodID(
- jclazz, "allocate", "(I)Ljava/nio/ByteBuffer;");
- assert(mid != nullptr);
- return mid;
- }
- /**
- * Get the Java Method: ByteBuffer#array
- *
- * @param env A pointer to the Java environment
- *
- * @return The Java Method ID or nullptr if the class or method id could not
- * be retieved
- */
- static jmethodID getArrayMethodId(JNIEnv* env,
- jclass jbytebuffer_clazz = nullptr) {
- const jclass jclazz =
- jbytebuffer_clazz == nullptr ? getJClass(env) : jbytebuffer_clazz;
- if(jclazz == nullptr) {
- // exception occurred accessing class
- return nullptr;
- }
- static jmethodID mid = env->GetMethodID(jclazz, "array", "()[B");
- assert(mid != nullptr);
- return mid;
- }
- static jobject construct(
- JNIEnv* env, const bool direct, const size_t capacity,
- jclass jbytebuffer_clazz = nullptr) {
- return constructWith(env, direct, nullptr, capacity, jbytebuffer_clazz);
- }
- static jobject constructWith(
- JNIEnv* env, const bool direct, const char* buf, const size_t capacity,
- jclass jbytebuffer_clazz = nullptr) {
- if (direct) {
- bool allocated = false;
- if (buf == nullptr) {
- buf = new char[capacity];
- allocated = true;
- }
- jobject jbuf = env->NewDirectByteBuffer(const_cast<char*>(buf), static_cast<jlong>(capacity));
- if (jbuf == nullptr) {
- // exception occurred
- if (allocated) {
- delete[] static_cast<const char*>(buf);
- }
- return nullptr;
- }
- return jbuf;
- } else {
- const jclass jclazz =
- jbytebuffer_clazz == nullptr ? getJClass(env) : jbytebuffer_clazz;
- if (jclazz == nullptr) {
- // exception occurred accessing class
- return nullptr;
- }
- const jmethodID jmid_allocate = getAllocateMethodId(env, jbytebuffer_clazz);
- if (jmid_allocate == nullptr) {
- // exception occurred accessing class, or NoSuchMethodException or OutOfMemoryError
- return nullptr;
- }
- const jobject jbuf = env->CallStaticObjectMethod(
- jclazz, jmid_allocate, static_cast<jint>(capacity));
- if (env->ExceptionCheck()) {
- // exception occurred
- return nullptr;
- }
- // set buffer data?
- if (buf != nullptr) {
- jbyteArray jarray = array(env, jbuf, jbytebuffer_clazz);
- if (jarray == nullptr) {
- // exception occurred
- env->DeleteLocalRef(jbuf);
- return nullptr;
- }
- jboolean is_copy = JNI_FALSE;
- jbyte* ja = reinterpret_cast<jbyte*>(
- env->GetPrimitiveArrayCritical(jarray, &is_copy));
- if (ja == nullptr) {
- // exception occurred
- env->DeleteLocalRef(jarray);
- env->DeleteLocalRef(jbuf);
- return nullptr;
- }
- memcpy(ja, const_cast<char*>(buf), capacity);
- env->ReleasePrimitiveArrayCritical(jarray, ja, 0);
- env->DeleteLocalRef(jarray);
- }
- return jbuf;
- }
- }
- static jbyteArray array(JNIEnv* env, const jobject& jbyte_buffer,
- jclass jbytebuffer_clazz = nullptr) {
- const jmethodID mid = getArrayMethodId(env, jbytebuffer_clazz);
- if (mid == nullptr) {
- // exception occurred accessing class, or NoSuchMethodException or OutOfMemoryError
- return nullptr;
- }
- const jobject jarray = env->CallObjectMethod(jbyte_buffer, mid);
- if (env->ExceptionCheck()) {
- // exception occurred
- return nullptr;
- }
- return static_cast<jbyteArray>(jarray);
- }
- };
- // The portal class for java.lang.Integer
- class IntegerJni : public JavaClass {
- public:
- /**
- * Get the Java Class java.lang.Integer
- *
- * @param env A pointer to the Java environment
- *
- * @return The Java Class or nullptr if one of the
- * ClassFormatError, ClassCircularityError, NoClassDefFoundError,
- * OutOfMemoryError or ExceptionInInitializerError exceptions is thrown
- */
- static jclass getJClass(JNIEnv* env) {
- return JavaClass::getJClass(env, "java/lang/Integer");
- }
- static jobject valueOf(JNIEnv* env, jint jprimitive_int) {
- jclass jclazz = getJClass(env);
- if (jclazz == nullptr) {
- // exception occurred accessing class
- return nullptr;
- }
- jmethodID mid =
- env->GetStaticMethodID(jclazz, "valueOf", "(I)Ljava/lang/Integer;");
- if (mid == nullptr) {
- // exception thrown: NoSuchMethodException or OutOfMemoryError
- return nullptr;
- }
- const jobject jinteger_obj =
- env->CallStaticObjectMethod(jclazz, mid, jprimitive_int);
- if (env->ExceptionCheck()) {
- // exception occurred
- return nullptr;
- }
- return jinteger_obj;
- }
- };
- // The portal class for java.lang.Long
- class LongJni : public JavaClass {
- public:
- /**
- * Get the Java Class java.lang.Long
- *
- * @param env A pointer to the Java environment
- *
- * @return The Java Class or nullptr if one of the
- * ClassFormatError, ClassCircularityError, NoClassDefFoundError,
- * OutOfMemoryError or ExceptionInInitializerError exceptions is thrown
- */
- static jclass getJClass(JNIEnv* env) {
- return JavaClass::getJClass(env, "java/lang/Long");
- }
- static jobject valueOf(JNIEnv* env, jlong jprimitive_long) {
- jclass jclazz = getJClass(env);
- if (jclazz == nullptr) {
- // exception occurred accessing class
- return nullptr;
- }
- jmethodID mid =
- env->GetStaticMethodID(jclazz, "valueOf", "(J)Ljava/lang/Long;");
- if (mid == nullptr) {
- // exception thrown: NoSuchMethodException or OutOfMemoryError
- return nullptr;
- }
- const jobject jlong_obj =
- env->CallStaticObjectMethod(jclazz, mid, jprimitive_long);
- if (env->ExceptionCheck()) {
- // exception occurred
- return nullptr;
- }
- return jlong_obj;
- }
- };
- // The portal class for java.lang.StringBuilder
- class StringBuilderJni : public JavaClass {
- public:
- /**
- * Get the Java Class java.lang.StringBuilder
- *
- * @param env A pointer to the Java environment
- *
- * @return The Java Class or nullptr if one of the
- * ClassFormatError, ClassCircularityError, NoClassDefFoundError,
- * OutOfMemoryError or ExceptionInInitializerError exceptions is thrown
- */
- static jclass getJClass(JNIEnv* env) {
- return JavaClass::getJClass(env, "java/lang/StringBuilder");
- }
- /**
- * Get the Java Method: StringBuilder#append
- *
- * @param env A pointer to the Java environment
- *
- * @return The Java Method ID or nullptr if the class or method id could not
- * be retieved
- */
- static jmethodID getListAddMethodId(JNIEnv* env) {
- jclass jclazz = getJClass(env);
- if(jclazz == nullptr) {
- // exception occurred accessing class
- return nullptr;
- }
- static jmethodID mid =
- env->GetMethodID(jclazz, "append",
- "(Ljava/lang/String;)Ljava/lang/StringBuilder;");
- assert(mid != nullptr);
- return mid;
- }
- /**
- * Appends a C-style string to a StringBuilder
- *
- * @param env A pointer to the Java environment
- * @param jstring_builder Reference to a java.lang.StringBuilder
- * @param c_str A C-style string to append to the StringBuilder
- *
- * @return A reference to the updated StringBuilder, or a nullptr if
- * an exception occurs
- */
- static jobject append(JNIEnv* env, jobject jstring_builder,
- const char* c_str) {
- jmethodID mid = getListAddMethodId(env);
- if(mid == nullptr) {
- // exception occurred accessing class or method
- return nullptr;
- }
- jstring new_value_str = env->NewStringUTF(c_str);
- if(new_value_str == nullptr) {
- // exception thrown: OutOfMemoryError
- return nullptr;
- }
- jobject jresult_string_builder =
- env->CallObjectMethod(jstring_builder, mid, new_value_str);
- if(env->ExceptionCheck()) {
- // exception occurred
- env->DeleteLocalRef(new_value_str);
- return nullptr;
- }
- return jresult_string_builder;
- }
- };
- // various utility functions for working with RocksDB and JNI
- class JniUtil {
- public:
- /**
- * Detect if jlong overflows size_t
- *
- * @param jvalue the jlong value
- *
- * @return
- */
- inline static Status check_if_jlong_fits_size_t(const jlong& jvalue) {
- Status s = Status::OK();
- if (static_cast<uint64_t>(jvalue) > std::numeric_limits<size_t>::max()) {
- s = Status::InvalidArgument(Slice("jlong overflows 32 bit value."));
- }
- return s;
- }
- /**
- * Obtains a reference to the JNIEnv from
- * the JVM
- *
- * If the current thread is not attached to the JavaVM
- * then it will be attached so as to retrieve the JNIEnv
- *
- * If a thread is attached, it must later be manually
- * released by calling JavaVM::DetachCurrentThread.
- * This can be handled by always matching calls to this
- * function with calls to {@link JniUtil::releaseJniEnv(JavaVM*, jboolean)}
- *
- * @param jvm (IN) A pointer to the JavaVM instance
- * @param attached (OUT) A pointer to a boolean which
- * will be set to JNI_TRUE if we had to attach the thread
- *
- * @return A pointer to the JNIEnv or nullptr if a fatal error
- * occurs and the JNIEnv cannot be retrieved
- */
- static JNIEnv* getJniEnv(JavaVM* jvm, jboolean* attached) {
- assert(jvm != nullptr);
- JNIEnv *env;
- const jint env_rs = jvm->GetEnv(reinterpret_cast<void**>(&env),
- JNI_VERSION_1_6);
- if(env_rs == JNI_OK) {
- // current thread is already attached, return the JNIEnv
- *attached = JNI_FALSE;
- return env;
- } else if(env_rs == JNI_EDETACHED) {
- // current thread is not attached, attempt to attach
- const jint rs_attach = jvm->AttachCurrentThread(reinterpret_cast<void**>(&env), NULL);
- if(rs_attach == JNI_OK) {
- *attached = JNI_TRUE;
- return env;
- } else {
- // error, could not attach the thread
- std::cerr << "JniUtil::getJniEnv - Fatal: could not attach current thread to JVM!" << std::endl;
- return nullptr;
- }
- } else if(env_rs == JNI_EVERSION) {
- // error, JDK does not support JNI_VERSION_1_6+
- std::cerr << "JniUtil::getJniEnv - Fatal: JDK does not support JNI_VERSION_1_6" << std::endl;
- return nullptr;
- } else {
- std::cerr << "JniUtil::getJniEnv - Fatal: Unknown error: env_rs=" << env_rs << std::endl;
- return nullptr;
- }
- }
- /**
- * Counterpart to {@link JniUtil::getJniEnv(JavaVM*, jboolean*)}
- *
- * Detachess the current thread from the JVM if it was previously
- * attached
- *
- * @param jvm (IN) A pointer to the JavaVM instance
- * @param attached (IN) JNI_TRUE if we previously had to attach the thread
- * to the JavaVM to get the JNIEnv
- */
- static void releaseJniEnv(JavaVM* jvm, jboolean& attached) {
- assert(jvm != nullptr);
- if(attached == JNI_TRUE) {
- const jint rs_detach = jvm->DetachCurrentThread();
- assert(rs_detach == JNI_OK);
- if(rs_detach != JNI_OK) {
- std::cerr << "JniUtil::getJniEnv - Warn: Unable to detach current thread from JVM!" << std::endl;
- }
- }
- }
- /**
- * Copies a Java String[] to a C++ std::vector<std::string>
- *
- * @param env (IN) A pointer to the java environment
- * @param jss (IN) The Java String array to copy
- * @param has_exception (OUT) will be set to JNI_TRUE
- * if an OutOfMemoryError or ArrayIndexOutOfBoundsException
- * exception occurs
- *
- * @return A std::vector<std:string> containing copies of the Java strings
- */
- static std::vector<std::string> copyStrings(JNIEnv* env,
- jobjectArray jss, jboolean* has_exception) {
- return ROCKSDB_NAMESPACE::JniUtil::copyStrings(
- env, jss, env->GetArrayLength(jss), has_exception);
- }
- /**
- * Copies a Java String[] to a C++ std::vector<std::string>
- *
- * @param env (IN) A pointer to the java environment
- * @param jss (IN) The Java String array to copy
- * @param jss_len (IN) The length of the Java String array to copy
- * @param has_exception (OUT) will be set to JNI_TRUE
- * if an OutOfMemoryError or ArrayIndexOutOfBoundsException
- * exception occurs
- *
- * @return A std::vector<std:string> containing copies of the Java strings
- */
- static std::vector<std::string> copyStrings(JNIEnv* env,
- jobjectArray jss, const jsize jss_len, jboolean* has_exception) {
- std::vector<std::string> strs;
- strs.reserve(jss_len);
- for (jsize i = 0; i < jss_len; i++) {
- jobject js = env->GetObjectArrayElement(jss, i);
- if(env->ExceptionCheck()) {
- // exception thrown: ArrayIndexOutOfBoundsException
- *has_exception = JNI_TRUE;
- return strs;
- }
- jstring jstr = static_cast<jstring>(js);
- const char* str = env->GetStringUTFChars(jstr, nullptr);
- if(str == nullptr) {
- // exception thrown: OutOfMemoryError
- env->DeleteLocalRef(js);
- *has_exception = JNI_TRUE;
- return strs;
- }
- strs.push_back(std::string(str));
- env->ReleaseStringUTFChars(jstr, str);
- env->DeleteLocalRef(js);
- }
- *has_exception = JNI_FALSE;
- return strs;
- }
- /**
- * Copies a jstring to a C-style null-terminated byte string
- * and releases the original jstring
- *
- * The jstring is copied as UTF-8
- *
- * If an exception occurs, then JNIEnv::ExceptionCheck()
- * will have been called
- *
- * @param env (IN) A pointer to the java environment
- * @param js (IN) The java string to copy
- * @param has_exception (OUT) will be set to JNI_TRUE
- * if an OutOfMemoryError exception occurs
- *
- * @return A pointer to the copied string, or a
- * nullptr if has_exception == JNI_TRUE
- */
- static std::unique_ptr<char[]> copyString(JNIEnv* env, jstring js,
- jboolean* has_exception) {
- const char *utf = env->GetStringUTFChars(js, nullptr);
- if(utf == nullptr) {
- // exception thrown: OutOfMemoryError
- env->ExceptionCheck();
- *has_exception = JNI_TRUE;
- return nullptr;
- } else if(env->ExceptionCheck()) {
- // exception thrown
- env->ReleaseStringUTFChars(js, utf);
- *has_exception = JNI_TRUE;
- return nullptr;
- }
- const jsize utf_len = env->GetStringUTFLength(js);
- std::unique_ptr<char[]> str(new char[utf_len + 1]); // Note: + 1 is needed for the c_str null terminator
- std::strcpy(str.get(), utf);
- env->ReleaseStringUTFChars(js, utf);
- *has_exception = JNI_FALSE;
- return str;
- }
- /**
- * Copies a jstring to a std::string
- * and releases the original jstring
- *
- * If an exception occurs, then JNIEnv::ExceptionCheck()
- * will have been called
- *
- * @param env (IN) A pointer to the java environment
- * @param js (IN) The java string to copy
- * @param has_exception (OUT) will be set to JNI_TRUE
- * if an OutOfMemoryError exception occurs
- *
- * @return A std:string copy of the jstring, or an
- * empty std::string if has_exception == JNI_TRUE
- */
- static std::string copyStdString(JNIEnv* env, jstring js,
- jboolean* has_exception) {
- const char *utf = env->GetStringUTFChars(js, nullptr);
- if(utf == nullptr) {
- // exception thrown: OutOfMemoryError
- env->ExceptionCheck();
- *has_exception = JNI_TRUE;
- return std::string();
- } else if(env->ExceptionCheck()) {
- // exception thrown
- env->ReleaseStringUTFChars(js, utf);
- *has_exception = JNI_TRUE;
- return std::string();
- }
- std::string name(utf);
- env->ReleaseStringUTFChars(js, utf);
- *has_exception = JNI_FALSE;
- return name;
- }
- /**
- * Copies bytes from a std::string to a jByteArray
- *
- * @param env A pointer to the java environment
- * @param bytes The bytes to copy
- *
- * @return the Java byte[], or nullptr if an exception occurs
- *
- * @throws RocksDBException thrown
- * if memory size to copy exceeds general java specific array size limitation.
- */
- static jbyteArray copyBytes(JNIEnv* env, std::string bytes) {
- return createJavaByteArrayWithSizeCheck(env, bytes.c_str(), bytes.size());
- }
- /**
- * Given a Java byte[][] which is an array of java.lang.Strings
- * where each String is a byte[], the passed function `string_fn`
- * will be called on each String, the result is the collected by
- * calling the passed function `collector_fn`
- *
- * @param env (IN) A pointer to the java environment
- * @param jbyte_strings (IN) A Java array of Strings expressed as bytes
- * @param string_fn (IN) A transform function to call for each String
- * @param collector_fn (IN) A collector which is called for the result
- * of each `string_fn`
- * @param has_exception (OUT) will be set to JNI_TRUE
- * if an ArrayIndexOutOfBoundsException or OutOfMemoryError
- * exception occurs
- */
- template <typename T> static void byteStrings(JNIEnv* env,
- jobjectArray jbyte_strings,
- std::function<T(const char*, const size_t)> string_fn,
- std::function<void(size_t, T)> collector_fn,
- jboolean *has_exception) {
- const jsize jlen = env->GetArrayLength(jbyte_strings);
- for(jsize i = 0; i < jlen; i++) {
- jobject jbyte_string_obj = env->GetObjectArrayElement(jbyte_strings, i);
- if(env->ExceptionCheck()) {
- // exception thrown: ArrayIndexOutOfBoundsException
- *has_exception = JNI_TRUE; // signal error
- return;
- }
- jbyteArray jbyte_string_ary =
- reinterpret_cast<jbyteArray>(jbyte_string_obj);
- T result = byteString(env, jbyte_string_ary, string_fn, has_exception);
- env->DeleteLocalRef(jbyte_string_obj);
- if(*has_exception == JNI_TRUE) {
- // exception thrown: OutOfMemoryError
- return;
- }
- collector_fn(i, result);
- }
- *has_exception = JNI_FALSE;
- }
- /**
- * Given a Java String which is expressed as a Java Byte Array byte[],
- * the passed function `string_fn` will be called on the String
- * and the result returned
- *
- * @param env (IN) A pointer to the java environment
- * @param jbyte_string_ary (IN) A Java String expressed in bytes
- * @param string_fn (IN) A transform function to call on the String
- * @param has_exception (OUT) will be set to JNI_TRUE
- * if an OutOfMemoryError exception occurs
- */
- template <typename T> static T byteString(JNIEnv* env,
- jbyteArray jbyte_string_ary,
- std::function<T(const char*, const size_t)> string_fn,
- jboolean* has_exception) {
- const jsize jbyte_string_len = env->GetArrayLength(jbyte_string_ary);
- return byteString<T>(env, jbyte_string_ary, jbyte_string_len, string_fn,
- has_exception);
- }
- /**
- * Given a Java String which is expressed as a Java Byte Array byte[],
- * the passed function `string_fn` will be called on the String
- * and the result returned
- *
- * @param env (IN) A pointer to the java environment
- * @param jbyte_string_ary (IN) A Java String expressed in bytes
- * @param jbyte_string_len (IN) The length of the Java String
- * expressed in bytes
- * @param string_fn (IN) A transform function to call on the String
- * @param has_exception (OUT) will be set to JNI_TRUE
- * if an OutOfMemoryError exception occurs
- */
- template <typename T> static T byteString(JNIEnv* env,
- jbyteArray jbyte_string_ary, const jsize jbyte_string_len,
- std::function<T(const char*, const size_t)> string_fn,
- jboolean* has_exception) {
- jbyte* jbyte_string =
- env->GetByteArrayElements(jbyte_string_ary, nullptr);
- if(jbyte_string == nullptr) {
- // exception thrown: OutOfMemoryError
- *has_exception = JNI_TRUE;
- return nullptr; // signal error
- }
- T result =
- string_fn(reinterpret_cast<char *>(jbyte_string), jbyte_string_len);
- env->ReleaseByteArrayElements(jbyte_string_ary, jbyte_string, JNI_ABORT);
- *has_exception = JNI_FALSE;
- return result;
- }
- /**
- * Converts a std::vector<string> to a Java byte[][] where each Java String
- * is expressed as a Java Byte Array byte[].
- *
- * @param env A pointer to the java environment
- * @param strings A vector of Strings
- *
- * @return A Java array of Strings expressed as bytes,
- * or nullptr if an exception is thrown
- */
- static jobjectArray stringsBytes(JNIEnv* env, std::vector<std::string> strings) {
- jclass jcls_ba = ByteJni::getArrayJClass(env);
- if(jcls_ba == nullptr) {
- // exception occurred
- return nullptr;
- }
- const jsize len = static_cast<jsize>(strings.size());
- jobjectArray jbyte_strings = env->NewObjectArray(len, jcls_ba, nullptr);
- if(jbyte_strings == nullptr) {
- // exception thrown: OutOfMemoryError
- return nullptr;
- }
- for (jsize i = 0; i < len; i++) {
- std::string *str = &strings[i];
- const jsize str_len = static_cast<jsize>(str->size());
- jbyteArray jbyte_string_ary = env->NewByteArray(str_len);
- if(jbyte_string_ary == nullptr) {
- // exception thrown: OutOfMemoryError
- env->DeleteLocalRef(jbyte_strings);
- return nullptr;
- }
- env->SetByteArrayRegion(
- jbyte_string_ary, 0, str_len,
- const_cast<jbyte*>(reinterpret_cast<const jbyte*>(str->c_str())));
- if(env->ExceptionCheck()) {
- // exception thrown: ArrayIndexOutOfBoundsException
- env->DeleteLocalRef(jbyte_string_ary);
- env->DeleteLocalRef(jbyte_strings);
- return nullptr;
- }
- env->SetObjectArrayElement(jbyte_strings, i, jbyte_string_ary);
- if(env->ExceptionCheck()) {
- // exception thrown: ArrayIndexOutOfBoundsException
- // or ArrayStoreException
- env->DeleteLocalRef(jbyte_string_ary);
- env->DeleteLocalRef(jbyte_strings);
- return nullptr;
- }
- env->DeleteLocalRef(jbyte_string_ary);
- }
- return jbyte_strings;
- }
- /**
- * Converts a std::vector<std::string> to a Java String[].
- *
- * @param env A pointer to the java environment
- * @param strings A vector of Strings
- *
- * @return A Java array of Strings,
- * or nullptr if an exception is thrown
- */
- static jobjectArray toJavaStrings(JNIEnv* env,
- const std::vector<std::string>* strings) {
- jclass jcls_str = env->FindClass("java/lang/String");
- if(jcls_str == nullptr) {
- // exception occurred
- return nullptr;
- }
- const jsize len = static_cast<jsize>(strings->size());
- jobjectArray jstrings = env->NewObjectArray(len, jcls_str, nullptr);
- if(jstrings == nullptr) {
- // exception thrown: OutOfMemoryError
- return nullptr;
- }
- for (jsize i = 0; i < len; i++) {
- const std::string *str = &((*strings)[i]);
- jstring js = ROCKSDB_NAMESPACE::JniUtil::toJavaString(env, str);
- if (js == nullptr) {
- env->DeleteLocalRef(jstrings);
- return nullptr;
- }
- env->SetObjectArrayElement(jstrings, i, js);
- if(env->ExceptionCheck()) {
- // exception thrown: ArrayIndexOutOfBoundsException
- // or ArrayStoreException
- env->DeleteLocalRef(js);
- env->DeleteLocalRef(jstrings);
- return nullptr;
- }
- }
- return jstrings;
- }
- /**
- * Creates a Java UTF String from a C++ std::string
- *
- * @param env A pointer to the java environment
- * @param string the C++ std::string
- * @param treat_empty_as_null true if empty strings should be treated as null
- *
- * @return the Java UTF string, or nullptr if the provided string
- * is null (or empty and treat_empty_as_null is set), or if an
- * exception occurs allocating the Java String.
- */
- static jstring toJavaString(JNIEnv* env, const std::string* string,
- const bool treat_empty_as_null = false) {
- if (string == nullptr) {
- return nullptr;
- }
- if (treat_empty_as_null && string->empty()) {
- return nullptr;
- }
- return env->NewStringUTF(string->c_str());
- }
- /**
- * Copies bytes to a new jByteArray with the check of java array size limitation.
- *
- * @param bytes pointer to memory to copy to a new jByteArray
- * @param size number of bytes to copy
- *
- * @return the Java byte[], or nullptr if an exception occurs
- *
- * @throws RocksDBException thrown
- * if memory size to copy exceeds general java array size limitation to avoid overflow.
- */
- static jbyteArray createJavaByteArrayWithSizeCheck(JNIEnv* env, const char* bytes, const size_t size) {
- // Limitation for java array size is vm specific
- // In general it cannot exceed Integer.MAX_VALUE (2^31 - 1)
- // Current HotSpot VM limitation for array size is Integer.MAX_VALUE - 5 (2^31 - 1 - 5)
- // It means that the next call to env->NewByteArray can still end with
- // OutOfMemoryError("Requested array size exceeds VM limit") coming from VM
- static const size_t MAX_JARRAY_SIZE = (static_cast<size_t>(1)) << 31;
- if(size > MAX_JARRAY_SIZE) {
- ROCKSDB_NAMESPACE::RocksDBExceptionJni::ThrowNew(
- env, "Requested array size exceeds VM limit");
- return nullptr;
- }
- const jsize jlen = static_cast<jsize>(size);
- jbyteArray jbytes = env->NewByteArray(jlen);
- if(jbytes == nullptr) {
- // exception thrown: OutOfMemoryError
- return nullptr;
- }
- env->SetByteArrayRegion(jbytes, 0, jlen,
- const_cast<jbyte*>(reinterpret_cast<const jbyte*>(bytes)));
- if(env->ExceptionCheck()) {
- // exception thrown: ArrayIndexOutOfBoundsException
- env->DeleteLocalRef(jbytes);
- return nullptr;
- }
- return jbytes;
- }
- /**
- * Copies bytes from a ROCKSDB_NAMESPACE::Slice to a jByteArray
- *
- * @param env A pointer to the java environment
- * @param bytes The bytes to copy
- *
- * @return the Java byte[] or nullptr if an exception occurs
- *
- * @throws RocksDBException thrown
- * if memory size to copy exceeds general java specific array size
- * limitation.
- */
- static jbyteArray copyBytes(JNIEnv* env, const Slice& bytes) {
- return createJavaByteArrayWithSizeCheck(env, bytes.data(), bytes.size());
- }
- /*
- * Helper for operations on a key and value
- * for example WriteBatch->Put
- *
- * TODO(AR) could be used for RocksDB->Put etc.
- */
- static std::unique_ptr<ROCKSDB_NAMESPACE::Status> kv_op(
- std::function<ROCKSDB_NAMESPACE::Status(ROCKSDB_NAMESPACE::Slice,
- ROCKSDB_NAMESPACE::Slice)>
- op,
- JNIEnv* env, jobject /*jobj*/, jbyteArray jkey, jint jkey_len,
- jbyteArray jvalue, jint jvalue_len) {
- jbyte* key = env->GetByteArrayElements(jkey, nullptr);
- if(env->ExceptionCheck()) {
- // exception thrown: OutOfMemoryError
- return nullptr;
- }
- jbyte* value = env->GetByteArrayElements(jvalue, nullptr);
- if(env->ExceptionCheck()) {
- // exception thrown: OutOfMemoryError
- if(key != nullptr) {
- env->ReleaseByteArrayElements(jkey, key, JNI_ABORT);
- }
- return nullptr;
- }
- ROCKSDB_NAMESPACE::Slice key_slice(reinterpret_cast<char*>(key),
- jkey_len);
- ROCKSDB_NAMESPACE::Slice value_slice(reinterpret_cast<char*>(value),
- jvalue_len);
- auto status = op(key_slice, value_slice);
- if(value != nullptr) {
- env->ReleaseByteArrayElements(jvalue, value, JNI_ABORT);
- }
- if(key != nullptr) {
- env->ReleaseByteArrayElements(jkey, key, JNI_ABORT);
- }
- return std::unique_ptr<ROCKSDB_NAMESPACE::Status>(
- new ROCKSDB_NAMESPACE::Status(status));
- }
- /*
- * Helper for operations on a key
- * for example WriteBatch->Delete
- *
- * TODO(AR) could be used for RocksDB->Delete etc.
- */
- static std::unique_ptr<ROCKSDB_NAMESPACE::Status> k_op(
- std::function<ROCKSDB_NAMESPACE::Status(ROCKSDB_NAMESPACE::Slice)> op,
- JNIEnv* env, jobject /*jobj*/, jbyteArray jkey, jint jkey_len) {
- jbyte* key = env->GetByteArrayElements(jkey, nullptr);
- if(env->ExceptionCheck()) {
- // exception thrown: OutOfMemoryError
- return nullptr;
- }
- ROCKSDB_NAMESPACE::Slice key_slice(reinterpret_cast<char*>(key),
- jkey_len);
- auto status = op(key_slice);
- if(key != nullptr) {
- env->ReleaseByteArrayElements(jkey, key, JNI_ABORT);
- }
- return std::unique_ptr<ROCKSDB_NAMESPACE::Status>(
- new ROCKSDB_NAMESPACE::Status(status));
- }
- /*
- * Helper for operations on a value
- * for example WriteBatchWithIndex->GetFromBatch
- */
- static jbyteArray v_op(std::function<ROCKSDB_NAMESPACE::Status(
- ROCKSDB_NAMESPACE::Slice, std::string*)>
- op,
- JNIEnv* env, jbyteArray jkey, jint jkey_len) {
- jbyte* key = env->GetByteArrayElements(jkey, nullptr);
- if(env->ExceptionCheck()) {
- // exception thrown: OutOfMemoryError
- return nullptr;
- }
- ROCKSDB_NAMESPACE::Slice key_slice(reinterpret_cast<char*>(key),
- jkey_len);
- std::string value;
- ROCKSDB_NAMESPACE::Status s = op(key_slice, &value);
- if(key != nullptr) {
- env->ReleaseByteArrayElements(jkey, key, JNI_ABORT);
- }
- if (s.IsNotFound()) {
- return nullptr;
- }
- if (s.ok()) {
- jbyteArray jret_value =
- env->NewByteArray(static_cast<jsize>(value.size()));
- if(jret_value == nullptr) {
- // exception thrown: OutOfMemoryError
- return nullptr;
- }
- env->SetByteArrayRegion(jret_value, 0, static_cast<jsize>(value.size()),
- const_cast<jbyte*>(reinterpret_cast<const jbyte*>(value.c_str())));
- if(env->ExceptionCheck()) {
- // exception thrown: ArrayIndexOutOfBoundsException
- if(jret_value != nullptr) {
- env->DeleteLocalRef(jret_value);
- }
- return nullptr;
- }
- return jret_value;
- }
- ROCKSDB_NAMESPACE::RocksDBExceptionJni::ThrowNew(env, s);
- return nullptr;
- }
- /**
- * Creates a vector<T*> of C++ pointers from
- * a Java array of C++ pointer addresses.
- *
- * @param env (IN) A pointer to the java environment
- * @param pointers (IN) A Java array of C++ pointer addresses
- * @param has_exception (OUT) will be set to JNI_TRUE
- * if an ArrayIndexOutOfBoundsException or OutOfMemoryError
- * exception occurs.
- *
- * @return A vector of C++ pointers.
- */
- template<typename T> static std::vector<T*> fromJPointers(
- JNIEnv* env, jlongArray jptrs, jboolean *has_exception) {
- const jsize jptrs_len = env->GetArrayLength(jptrs);
- std::vector<T*> ptrs;
- jlong* jptr = env->GetLongArrayElements(jptrs, nullptr);
- if (jptr == nullptr) {
- // exception thrown: OutOfMemoryError
- *has_exception = JNI_TRUE;
- return ptrs;
- }
- ptrs.reserve(jptrs_len);
- for (jsize i = 0; i < jptrs_len; i++) {
- ptrs.push_back(reinterpret_cast<T*>(jptr[i]));
- }
- env->ReleaseLongArrayElements(jptrs, jptr, JNI_ABORT);
- return ptrs;
- }
- /**
- * Creates a Java array of C++ pointer addresses
- * from a vector of C++ pointers.
- *
- * @param env (IN) A pointer to the java environment
- * @param pointers (IN) A vector of C++ pointers
- * @param has_exception (OUT) will be set to JNI_TRUE
- * if an ArrayIndexOutOfBoundsException or OutOfMemoryError
- * exception occurs
- *
- * @return Java array of C++ pointer addresses.
- */
- template<typename T> static jlongArray toJPointers(JNIEnv* env,
- const std::vector<T*> &pointers,
- jboolean *has_exception) {
- const jsize len = static_cast<jsize>(pointers.size());
- std::unique_ptr<jlong[]> results(new jlong[len]);
- std::transform(pointers.begin(), pointers.end(), results.get(), [](T* pointer) -> jlong {
- return reinterpret_cast<jlong>(pointer);
- });
- jlongArray jpointers = env->NewLongArray(len);
- if (jpointers == nullptr) {
- // exception thrown: OutOfMemoryError
- *has_exception = JNI_TRUE;
- return nullptr;
- }
- env->SetLongArrayRegion(jpointers, 0, len, results.get());
- if (env->ExceptionCheck()) {
- // exception thrown: ArrayIndexOutOfBoundsException
- *has_exception = JNI_TRUE;
- env->DeleteLocalRef(jpointers);
- return nullptr;
- }
- *has_exception = JNI_FALSE;
- return jpointers;
- }
- /*
- * Helper for operations on a key and value
- * for example WriteBatch->Put
- *
- * TODO(AR) could be extended to cover returning ROCKSDB_NAMESPACE::Status
- * from `op` and used for RocksDB->Put etc.
- */
- static void kv_op_direct(std::function<void(ROCKSDB_NAMESPACE::Slice&,
- ROCKSDB_NAMESPACE::Slice&)>
- op,
- JNIEnv* env, jobject jkey, jint jkey_off,
- jint jkey_len, jobject jval, jint jval_off,
- jint jval_len) {
- char* key = reinterpret_cast<char*>(env->GetDirectBufferAddress(jkey));
- if (key == nullptr ||
- env->GetDirectBufferCapacity(jkey) < (jkey_off + jkey_len)) {
- ROCKSDB_NAMESPACE::RocksDBExceptionJni::ThrowNew(
- env, "Invalid key argument");
- return;
- }
- char* value = reinterpret_cast<char*>(env->GetDirectBufferAddress(jval));
- if (value == nullptr ||
- env->GetDirectBufferCapacity(jval) < (jval_off + jval_len)) {
- ROCKSDB_NAMESPACE::RocksDBExceptionJni::ThrowNew(
- env, "Invalid value argument");
- return;
- }
- key += jkey_off;
- value += jval_off;
- ROCKSDB_NAMESPACE::Slice key_slice(key, jkey_len);
- ROCKSDB_NAMESPACE::Slice value_slice(value, jval_len);
- op(key_slice, value_slice);
- }
- /*
- * Helper for operations on a key and value
- * for example WriteBatch->Delete
- *
- * TODO(AR) could be extended to cover returning ROCKSDB_NAMESPACE::Status
- * from `op` and used for RocksDB->Delete etc.
- */
- static void k_op_direct(std::function<void(ROCKSDB_NAMESPACE::Slice&)> op,
- JNIEnv* env, jobject jkey, jint jkey_off,
- jint jkey_len) {
- char* key = reinterpret_cast<char*>(env->GetDirectBufferAddress(jkey));
- if (key == nullptr ||
- env->GetDirectBufferCapacity(jkey) < (jkey_off + jkey_len)) {
- ROCKSDB_NAMESPACE::RocksDBExceptionJni::ThrowNew(
- env, "Invalid key argument");
- return;
- }
- key += jkey_off;
- ROCKSDB_NAMESPACE::Slice key_slice(key, jkey_len);
- return op(key_slice);
- }
- template <class T>
- static jint copyToDirect(JNIEnv* env, T& source, jobject jtarget,
- jint jtarget_off, jint jtarget_len) {
- char* target =
- reinterpret_cast<char*>(env->GetDirectBufferAddress(jtarget));
- if (target == nullptr ||
- env->GetDirectBufferCapacity(jtarget) < (jtarget_off + jtarget_len)) {
- ROCKSDB_NAMESPACE::RocksDBExceptionJni::ThrowNew(
- env, "Invalid target argument");
- return 0;
- }
- target += jtarget_off;
- const jint cvalue_len = static_cast<jint>(source.size());
- const jint length = std::min(jtarget_len, cvalue_len);
- memcpy(target, source.data(), length);
- return cvalue_len;
- }
- };
- class MapJni : public JavaClass {
- public:
- /**
- * Get the Java Class java.util.Map
- *
- * @param env A pointer to the Java environment
- *
- * @return The Java Class or nullptr if one of the
- * ClassFormatError, ClassCircularityError, NoClassDefFoundError,
- * OutOfMemoryError or ExceptionInInitializerError exceptions is thrown
- */
- static jclass getJClass(JNIEnv* env) {
- return JavaClass::getJClass(env, "java/util/Map");
- }
- /**
- * Get the Java Method: Map#put
- *
- * @param env A pointer to the Java environment
- *
- * @return The Java Method ID or nullptr if the class or method id could not
- * be retieved
- */
- static jmethodID getMapPutMethodId(JNIEnv* env) {
- jclass jlist_clazz = getJClass(env);
- if(jlist_clazz == nullptr) {
- // exception occurred accessing class
- return nullptr;
- }
- static jmethodID mid =
- env->GetMethodID(jlist_clazz, "put", "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;");
- assert(mid != nullptr);
- return mid;
- }
- };
- class HashMapJni : public JavaClass {
- public:
- /**
- * Get the Java Class java.util.HashMap
- *
- * @param env A pointer to the Java environment
- *
- * @return The Java Class or nullptr if one of the
- * ClassFormatError, ClassCircularityError, NoClassDefFoundError,
- * OutOfMemoryError or ExceptionInInitializerError exceptions is thrown
- */
- static jclass getJClass(JNIEnv* env) {
- return JavaClass::getJClass(env, "java/util/HashMap");
- }
- /**
- * Create a new Java java.util.HashMap object.
- *
- * @param env A pointer to the Java environment
- *
- * @return A reference to a Java java.util.HashMap object, or
- * nullptr if an an exception occurs
- */
- static jobject construct(JNIEnv* env, const uint32_t initial_capacity = 16) {
- jclass jclazz = getJClass(env);
- if (jclazz == nullptr) {
- // exception occurred accessing class
- return nullptr;
- }
- jmethodID mid = env->GetMethodID(jclazz, "<init>", "(I)V");
- if (mid == nullptr) {
- // exception thrown: NoSuchMethodException or OutOfMemoryError
- return nullptr;
- }
- jobject jhash_map = env->NewObject(jclazz, mid, static_cast<jint>(initial_capacity));
- if (env->ExceptionCheck()) {
- return nullptr;
- }
- return jhash_map;
- }
- /**
- * A function which maps a std::pair<K,V> to a std::pair<JK, JV>
- *
- * @return Either a pointer to a std::pair<jobject, jobject>, or nullptr
- * if an error occurs during the mapping
- */
- template <typename K, typename V, typename JK, typename JV>
- using FnMapKV = std::function<std::unique_ptr<std::pair<JK, JV>> (const std::pair<K, V>&)>;
- // template <class I, typename K, typename V, typename K1, typename V1, typename std::enable_if<std::is_same<typename std::iterator_traits<I>::value_type, std::pair<const K,V>>::value, int32_t>::type = 0>
- // static void putAll(JNIEnv* env, const jobject jhash_map, I iterator, const FnMapKV<const K,V,K1,V1> &fn_map_kv) {
- /**
- * Returns true if it succeeds, false if an error occurs
- */
- template<class iterator_type, typename K, typename V>
- static bool putAll(JNIEnv* env, const jobject jhash_map, iterator_type iterator, iterator_type end, const FnMapKV<K, V, jobject, jobject> &fn_map_kv) {
- const jmethodID jmid_put =
- ROCKSDB_NAMESPACE::MapJni::getMapPutMethodId(env);
- if (jmid_put == nullptr) {
- return false;
- }
- for (auto it = iterator; it != end; ++it) {
- const std::unique_ptr<std::pair<jobject, jobject>> result = fn_map_kv(*it);
- if (result == nullptr) {
- // an error occurred during fn_map_kv
- return false;
- }
- env->CallObjectMethod(jhash_map, jmid_put, result->first, result->second);
- if (env->ExceptionCheck()) {
- // exception occurred
- env->DeleteLocalRef(result->second);
- env->DeleteLocalRef(result->first);
- return false;
- }
- // release local references
- env->DeleteLocalRef(result->second);
- env->DeleteLocalRef(result->first);
- }
- return true;
- }
- /**
- * Creates a java.util.Map<String, String> from a std::map<std::string, std::string>
- *
- * @param env A pointer to the Java environment
- * @param map the Cpp map
- *
- * @return a reference to the Java java.util.Map object, or nullptr if an exception occcurred
- */
- static jobject fromCppMap(JNIEnv* env, const std::map<std::string, std::string>* map) {
- if (map == nullptr) {
- return nullptr;
- }
- jobject jhash_map = construct(env, static_cast<uint32_t>(map->size()));
- if (jhash_map == nullptr) {
- // exception occurred
- return nullptr;
- }
- const ROCKSDB_NAMESPACE::HashMapJni::FnMapKV<
- const std::string, const std::string, jobject, jobject>
- fn_map_kv =
- [env](const std::pair<const std::string, const std::string>& kv) {
- jstring jkey = ROCKSDB_NAMESPACE::JniUtil::toJavaString(
- env, &(kv.first), false);
- if (env->ExceptionCheck()) {
- // an error occurred
- return std::unique_ptr<std::pair<jobject, jobject>>(nullptr);
- }
- jstring jvalue = ROCKSDB_NAMESPACE::JniUtil::toJavaString(
- env, &(kv.second), true);
- if (env->ExceptionCheck()) {
- // an error occurred
- env->DeleteLocalRef(jkey);
- return std::unique_ptr<std::pair<jobject, jobject>>(nullptr);
- }
- return std::unique_ptr<std::pair<jobject, jobject>>(
- new std::pair<jobject, jobject>(
- static_cast<jobject>(jkey),
- static_cast<jobject>(jvalue)));
- };
- if (!putAll(env, jhash_map, map->begin(), map->end(), fn_map_kv)) {
- // exception occurred
- return nullptr;
- }
- return jhash_map;
- }
- /**
- * Creates a java.util.Map<String, Long> from a std::map<std::string, uint32_t>
- *
- * @param env A pointer to the Java environment
- * @param map the Cpp map
- *
- * @return a reference to the Java java.util.Map object, or nullptr if an exception occcurred
- */
- static jobject fromCppMap(JNIEnv* env, const std::map<std::string, uint32_t>* map) {
- if (map == nullptr) {
- return nullptr;
- }
- if (map == nullptr) {
- return nullptr;
- }
- jobject jhash_map = construct(env, static_cast<uint32_t>(map->size()));
- if (jhash_map == nullptr) {
- // exception occurred
- return nullptr;
- }
- const ROCKSDB_NAMESPACE::HashMapJni::FnMapKV<
- const std::string, const uint32_t, jobject, jobject>
- fn_map_kv =
- [env](const std::pair<const std::string, const uint32_t>& kv) {
- jstring jkey = ROCKSDB_NAMESPACE::JniUtil::toJavaString(
- env, &(kv.first), false);
- if (env->ExceptionCheck()) {
- // an error occurred
- return std::unique_ptr<std::pair<jobject, jobject>>(nullptr);
- }
- jobject jvalue = ROCKSDB_NAMESPACE::IntegerJni::valueOf(
- env, static_cast<jint>(kv.second));
- if (env->ExceptionCheck()) {
- // an error occurred
- env->DeleteLocalRef(jkey);
- return std::unique_ptr<std::pair<jobject, jobject>>(nullptr);
- }
- return std::unique_ptr<std::pair<jobject, jobject>>(
- new std::pair<jobject, jobject>(static_cast<jobject>(jkey),
- jvalue));
- };
- if (!putAll(env, jhash_map, map->begin(), map->end(), fn_map_kv)) {
- // exception occurred
- return nullptr;
- }
- return jhash_map;
- }
- /**
- * Creates a java.util.Map<String, Long> from a std::map<std::string, uint64_t>
- *
- * @param env A pointer to the Java environment
- * @param map the Cpp map
- *
- * @return a reference to the Java java.util.Map object, or nullptr if an exception occcurred
- */
- static jobject fromCppMap(JNIEnv* env, const std::map<std::string, uint64_t>* map) {
- if (map == nullptr) {
- return nullptr;
- }
- jobject jhash_map = construct(env, static_cast<uint32_t>(map->size()));
- if (jhash_map == nullptr) {
- // exception occurred
- return nullptr;
- }
- const ROCKSDB_NAMESPACE::HashMapJni::FnMapKV<
- const std::string, const uint64_t, jobject, jobject>
- fn_map_kv =
- [env](const std::pair<const std::string, const uint64_t>& kv) {
- jstring jkey = ROCKSDB_NAMESPACE::JniUtil::toJavaString(
- env, &(kv.first), false);
- if (env->ExceptionCheck()) {
- // an error occurred
- return std::unique_ptr<std::pair<jobject, jobject>>(nullptr);
- }
- jobject jvalue = ROCKSDB_NAMESPACE::LongJni::valueOf(
- env, static_cast<jlong>(kv.second));
- if (env->ExceptionCheck()) {
- // an error occurred
- env->DeleteLocalRef(jkey);
- return std::unique_ptr<std::pair<jobject, jobject>>(nullptr);
- }
- return std::unique_ptr<std::pair<jobject, jobject>>(
- new std::pair<jobject, jobject>(static_cast<jobject>(jkey),
- jvalue));
- };
- if (!putAll(env, jhash_map, map->begin(), map->end(), fn_map_kv)) {
- // exception occurred
- return nullptr;
- }
- return jhash_map;
- }
- /**
- * Creates a java.util.Map<String, Long> from a std::map<uint32_t, uint64_t>
- *
- * @param env A pointer to the Java environment
- * @param map the Cpp map
- *
- * @return a reference to the Java java.util.Map object, or nullptr if an exception occcurred
- */
- static jobject fromCppMap(JNIEnv* env, const std::map<uint32_t, uint64_t>* map) {
- if (map == nullptr) {
- return nullptr;
- }
- jobject jhash_map = construct(env, static_cast<uint32_t>(map->size()));
- if (jhash_map == nullptr) {
- // exception occurred
- return nullptr;
- }
- const ROCKSDB_NAMESPACE::HashMapJni::FnMapKV<const uint32_t, const uint64_t,
- jobject, jobject>
- fn_map_kv = [env](const std::pair<const uint32_t, const uint64_t>& kv) {
- jobject jkey = ROCKSDB_NAMESPACE::IntegerJni::valueOf(
- env, static_cast<jint>(kv.first));
- if (env->ExceptionCheck()) {
- // an error occurred
- return std::unique_ptr<std::pair<jobject, jobject>>(nullptr);
- }
- jobject jvalue = ROCKSDB_NAMESPACE::LongJni::valueOf(
- env, static_cast<jlong>(kv.second));
- if (env->ExceptionCheck()) {
- // an error occurred
- env->DeleteLocalRef(jkey);
- return std::unique_ptr<std::pair<jobject, jobject>>(nullptr);
- }
- return std::unique_ptr<std::pair<jobject, jobject>>(
- new std::pair<jobject, jobject>(static_cast<jobject>(jkey),
- jvalue));
- };
- if (!putAll(env, jhash_map, map->begin(), map->end(), fn_map_kv)) {
- // exception occurred
- return nullptr;
- }
- return jhash_map;
- }
- };
- // The portal class for org.rocksdb.RocksDB
- class RocksDBJni
- : public RocksDBNativeClass<ROCKSDB_NAMESPACE::DB*, RocksDBJni> {
- public:
- /**
- * Get the Java Class org.rocksdb.RocksDB
- *
- * @param env A pointer to the Java environment
- *
- * @return The Java Class or nullptr if one of the
- * ClassFormatError, ClassCircularityError, NoClassDefFoundError,
- * OutOfMemoryError or ExceptionInInitializerError exceptions is thrown
- */
- static jclass getJClass(JNIEnv* env) {
- return RocksDBNativeClass::getJClass(env, "org/rocksdb/RocksDB");
- }
- };
- // The portal class for org.rocksdb.Options
- class OptionsJni
- : public RocksDBNativeClass<ROCKSDB_NAMESPACE::Options*, OptionsJni> {
- public:
- /**
- * Get the Java Class org.rocksdb.Options
- *
- * @param env A pointer to the Java environment
- *
- * @return The Java Class or nullptr if one of the
- * ClassFormatError, ClassCircularityError, NoClassDefFoundError,
- * OutOfMemoryError or ExceptionInInitializerError exceptions is thrown
- */
- static jclass getJClass(JNIEnv* env) {
- return RocksDBNativeClass::getJClass(env, "org/rocksdb/Options");
- }
- };
- // The portal class for org.rocksdb.DBOptions
- class DBOptionsJni
- : public RocksDBNativeClass<ROCKSDB_NAMESPACE::DBOptions*, DBOptionsJni> {
- public:
- /**
- * Get the Java Class org.rocksdb.DBOptions
- *
- * @param env A pointer to the Java environment
- *
- * @return The Java Class or nullptr if one of the
- * ClassFormatError, ClassCircularityError, NoClassDefFoundError,
- * OutOfMemoryError or ExceptionInInitializerError exceptions is thrown
- */
- static jclass getJClass(JNIEnv* env) {
- return RocksDBNativeClass::getJClass(env, "org/rocksdb/DBOptions");
- }
- };
- // The portal class for org.rocksdb.ColumnFamilyOptions
- class ColumnFamilyOptionsJni
- : public RocksDBNativeClass<ROCKSDB_NAMESPACE::ColumnFamilyOptions*,
- ColumnFamilyOptionsJni> {
- public:
- /**
- * Get the Java Class org.rocksdb.ColumnFamilyOptions
- *
- * @param env A pointer to the Java environment
- *
- * @return The Java Class or nullptr if one of the
- * ClassFormatError, ClassCircularityError, NoClassDefFoundError,
- * OutOfMemoryError or ExceptionInInitializerError exceptions is thrown
- */
- static jclass getJClass(JNIEnv* env) {
- return RocksDBNativeClass::getJClass(env,
- "org/rocksdb/ColumnFamilyOptions");
- }
- /**
- * Create a new Java org.rocksdb.ColumnFamilyOptions object with the same
- * properties as the provided C++ ROCKSDB_NAMESPACE::ColumnFamilyOptions
- * object
- *
- * @param env A pointer to the Java environment
- * @param cfoptions A pointer to ROCKSDB_NAMESPACE::ColumnFamilyOptions object
- *
- * @return A reference to a Java org.rocksdb.ColumnFamilyOptions object, or
- * nullptr if an an exception occurs
- */
- static jobject construct(JNIEnv* env, const ColumnFamilyOptions* cfoptions) {
- auto* cfo = new ROCKSDB_NAMESPACE::ColumnFamilyOptions(*cfoptions);
- jclass jclazz = getJClass(env);
- if(jclazz == nullptr) {
- // exception occurred accessing class
- return nullptr;
- }
- jmethodID mid = env->GetMethodID(jclazz, "<init>", "(J)V");
- if (mid == nullptr) {
- // exception thrown: NoSuchMethodException or OutOfMemoryError
- return nullptr;
- }
- jobject jcfd = env->NewObject(jclazz, mid, reinterpret_cast<jlong>(cfo));
- if (env->ExceptionCheck()) {
- return nullptr;
- }
- return jcfd;
- }
- };
- // The portal class for org.rocksdb.WriteOptions
- class WriteOptionsJni
- : public RocksDBNativeClass<ROCKSDB_NAMESPACE::WriteOptions*,
- WriteOptionsJni> {
- public:
- /**
- * Get the Java Class org.rocksdb.WriteOptions
- *
- * @param env A pointer to the Java environment
- *
- * @return The Java Class or nullptr if one of the
- * ClassFormatError, ClassCircularityError, NoClassDefFoundError,
- * OutOfMemoryError or ExceptionInInitializerError exceptions is thrown
- */
- static jclass getJClass(JNIEnv* env) {
- return RocksDBNativeClass::getJClass(env, "org/rocksdb/WriteOptions");
- }
- };
- // The portal class for org.rocksdb.ReadOptions
- class ReadOptionsJni
- : public RocksDBNativeClass<ROCKSDB_NAMESPACE::ReadOptions*,
- ReadOptionsJni> {
- public:
- /**
- * Get the Java Class org.rocksdb.ReadOptions
- *
- * @param env A pointer to the Java environment
- *
- * @return The Java Class or nullptr if one of the
- * ClassFormatError, ClassCircularityError, NoClassDefFoundError,
- * OutOfMemoryError or ExceptionInInitializerError exceptions is thrown
- */
- static jclass getJClass(JNIEnv* env) {
- return RocksDBNativeClass::getJClass(env, "org/rocksdb/ReadOptions");
- }
- };
- // The portal class for org.rocksdb.WriteBatch
- class WriteBatchJni
- : public RocksDBNativeClass<ROCKSDB_NAMESPACE::WriteBatch*, WriteBatchJni> {
- public:
- /**
- * Get the Java Class org.rocksdb.WriteBatch
- *
- * @param env A pointer to the Java environment
- *
- * @return The Java Class or nullptr if one of the
- * ClassFormatError, ClassCircularityError, NoClassDefFoundError,
- * OutOfMemoryError or ExceptionInInitializerError exceptions is thrown
- */
- static jclass getJClass(JNIEnv* env) {
- return RocksDBNativeClass::getJClass(env, "org/rocksdb/WriteBatch");
- }
- /**
- * Create a new Java org.rocksdb.WriteBatch object
- *
- * @param env A pointer to the Java environment
- * @param wb A pointer to ROCKSDB_NAMESPACE::WriteBatch object
- *
- * @return A reference to a Java org.rocksdb.WriteBatch object, or
- * nullptr if an an exception occurs
- */
- static jobject construct(JNIEnv* env, const WriteBatch* wb) {
- jclass jclazz = getJClass(env);
- if(jclazz == nullptr) {
- // exception occurred accessing class
- return nullptr;
- }
- jmethodID mid = env->GetMethodID(jclazz, "<init>", "(J)V");
- if (mid == nullptr) {
- // exception thrown: NoSuchMethodException or OutOfMemoryError
- return nullptr;
- }
- jobject jwb = env->NewObject(jclazz, mid, reinterpret_cast<jlong>(wb));
- if (env->ExceptionCheck()) {
- return nullptr;
- }
- return jwb;
- }
- };
- // The portal class for org.rocksdb.WriteBatch.Handler
- class WriteBatchHandlerJni
- : public RocksDBNativeClass<
- const ROCKSDB_NAMESPACE::WriteBatchHandlerJniCallback*,
- WriteBatchHandlerJni> {
- public:
- /**
- * Get the Java Class org.rocksdb.WriteBatch.Handler
- *
- * @param env A pointer to the Java environment
- *
- * @return The Java Class or nullptr if one of the
- * ClassFormatError, ClassCircularityError, NoClassDefFoundError,
- * OutOfMemoryError or ExceptionInInitializerError exceptions is thrown
- */
- static jclass getJClass(JNIEnv* env) {
- return RocksDBNativeClass::getJClass(env,
- "org/rocksdb/WriteBatch$Handler");
- }
- /**
- * Get the Java Method: WriteBatch.Handler#put
- *
- * @param env A pointer to the Java environment
- *
- * @return The Java Method ID or nullptr if the class or method id could not
- * be retieved
- */
- static jmethodID getPutCfMethodId(JNIEnv* env) {
- jclass jclazz = getJClass(env);
- if(jclazz == nullptr) {
- // exception occurred accessing class
- return nullptr;
- }
- static jmethodID mid = env->GetMethodID(jclazz, "put", "(I[B[B)V");
- assert(mid != nullptr);
- return mid;
- }
- /**
- * Get the Java Method: WriteBatch.Handler#put
- *
- * @param env A pointer to the Java environment
- *
- * @return The Java Method ID or nullptr if the class or method id could not
- * be retieved
- */
- static jmethodID getPutMethodId(JNIEnv* env) {
- jclass jclazz = getJClass(env);
- if(jclazz == nullptr) {
- // exception occurred accessing class
- return nullptr;
- }
- static jmethodID mid = env->GetMethodID(jclazz, "put", "([B[B)V");
- assert(mid != nullptr);
- return mid;
- }
- /**
- * Get the Java Method: WriteBatch.Handler#merge
- *
- * @param env A pointer to the Java environment
- *
- * @return The Java Method ID or nullptr if the class or method id could not
- * be retieved
- */
- static jmethodID getMergeCfMethodId(JNIEnv* env) {
- jclass jclazz = getJClass(env);
- if(jclazz == nullptr) {
- // exception occurred accessing class
- return nullptr;
- }
- static jmethodID mid = env->GetMethodID(jclazz, "merge", "(I[B[B)V");
- assert(mid != nullptr);
- return mid;
- }
- /**
- * Get the Java Method: WriteBatch.Handler#merge
- *
- * @param env A pointer to the Java environment
- *
- * @return The Java Method ID or nullptr if the class or method id could not
- * be retieved
- */
- static jmethodID getMergeMethodId(JNIEnv* env) {
- jclass jclazz = getJClass(env);
- if(jclazz == nullptr) {
- // exception occurred accessing class
- return nullptr;
- }
- static jmethodID mid = env->GetMethodID(jclazz, "merge", "([B[B)V");
- assert(mid != nullptr);
- return mid;
- }
- /**
- * Get the Java Method: WriteBatch.Handler#delete
- *
- * @param env A pointer to the Java environment
- *
- * @return The Java Method ID or nullptr if the class or method id could not
- * be retieved
- */
- static jmethodID getDeleteCfMethodId(JNIEnv* env) {
- jclass jclazz = getJClass(env);
- if(jclazz == nullptr) {
- // exception occurred accessing class
- return nullptr;
- }
- static jmethodID mid = env->GetMethodID(jclazz, "delete", "(I[B)V");
- assert(mid != nullptr);
- return mid;
- }
- /**
- * Get the Java Method: WriteBatch.Handler#delete
- *
- * @param env A pointer to the Java environment
- *
- * @return The Java Method ID or nullptr if the class or method id could not
- * be retieved
- */
- static jmethodID getDeleteMethodId(JNIEnv* env) {
- jclass jclazz = getJClass(env);
- if(jclazz == nullptr) {
- // exception occurred accessing class
- return nullptr;
- }
- static jmethodID mid = env->GetMethodID(jclazz, "delete", "([B)V");
- assert(mid != nullptr);
- return mid;
- }
- /**
- * Get the Java Method: WriteBatch.Handler#singleDelete
- *
- * @param env A pointer to the Java environment
- *
- * @return The Java Method ID or nullptr if the class or method id could not
- * be retieved
- */
- static jmethodID getSingleDeleteCfMethodId(JNIEnv* env) {
- jclass jclazz = getJClass(env);
- if(jclazz == nullptr) {
- // exception occurred accessing class
- return nullptr;
- }
- static jmethodID mid = env->GetMethodID(jclazz, "singleDelete", "(I[B)V");
- assert(mid != nullptr);
- return mid;
- }
- /**
- * Get the Java Method: WriteBatch.Handler#singleDelete
- *
- * @param env A pointer to the Java environment
- *
- * @return The Java Method ID or nullptr if the class or method id could not
- * be retieved
- */
- static jmethodID getSingleDeleteMethodId(JNIEnv* env) {
- jclass jclazz = getJClass(env);
- if(jclazz == nullptr) {
- // exception occurred accessing class
- return nullptr;
- }
- static jmethodID mid = env->GetMethodID(jclazz, "singleDelete", "([B)V");
- assert(mid != nullptr);
- return mid;
- }
- /**
- * Get the Java Method: WriteBatch.Handler#deleteRange
- *
- * @param env A pointer to the Java environment
- *
- * @return The Java Method ID or nullptr if the class or method id could not
- * be retieved
- */
- static jmethodID getDeleteRangeCfMethodId(JNIEnv* env) {
- jclass jclazz = getJClass(env);
- if (jclazz == nullptr) {
- // exception occurred accessing class
- return nullptr;
- }
- static jmethodID mid = env->GetMethodID(jclazz, "deleteRange", "(I[B[B)V");
- assert(mid != nullptr);
- return mid;
- }
- /**
- * Get the Java Method: WriteBatch.Handler#deleteRange
- *
- * @param env A pointer to the Java environment
- *
- * @return The Java Method ID or nullptr if the class or method id could not
- * be retieved
- */
- static jmethodID getDeleteRangeMethodId(JNIEnv* env) {
- jclass jclazz = getJClass(env);
- if (jclazz == nullptr) {
- // exception occurred accessing class
- return nullptr;
- }
- static jmethodID mid = env->GetMethodID(jclazz, "deleteRange", "([B[B)V");
- assert(mid != nullptr);
- return mid;
- }
- /**
- * Get the Java Method: WriteBatch.Handler#logData
- *
- * @param env A pointer to the Java environment
- *
- * @return The Java Method ID or nullptr if the class or method id could not
- * be retieved
- */
- static jmethodID getLogDataMethodId(JNIEnv* env) {
- jclass jclazz = getJClass(env);
- if(jclazz == nullptr) {
- // exception occurred accessing class
- return nullptr;
- }
- static jmethodID mid = env->GetMethodID(jclazz, "logData", "([B)V");
- assert(mid != nullptr);
- return mid;
- }
- /**
- * Get the Java Method: WriteBatch.Handler#putBlobIndex
- *
- * @param env A pointer to the Java environment
- *
- * @return The Java Method ID or nullptr if the class or method id could not
- * be retieved
- */
- static jmethodID getPutBlobIndexCfMethodId(JNIEnv* env) {
- jclass jclazz = getJClass(env);
- if(jclazz == nullptr) {
- // exception occurred accessing class
- return nullptr;
- }
- static jmethodID mid = env->GetMethodID(jclazz, "putBlobIndex", "(I[B[B)V");
- assert(mid != nullptr);
- return mid;
- }
- /**
- * Get the Java Method: WriteBatch.Handler#markBeginPrepare
- *
- * @param env A pointer to the Java environment
- *
- * @return The Java Method ID or nullptr if the class or method id could not
- * be retieved
- */
- static jmethodID getMarkBeginPrepareMethodId(JNIEnv* env) {
- jclass jclazz = getJClass(env);
- if(jclazz == nullptr) {
- // exception occurred accessing class
- return nullptr;
- }
- static jmethodID mid = env->GetMethodID(jclazz, "markBeginPrepare", "()V");
- assert(mid != nullptr);
- return mid;
- }
- /**
- * Get the Java Method: WriteBatch.Handler#markEndPrepare
- *
- * @param env A pointer to the Java environment
- *
- * @return The Java Method ID or nullptr if the class or method id could not
- * be retieved
- */
- static jmethodID getMarkEndPrepareMethodId(JNIEnv* env) {
- jclass jclazz = getJClass(env);
- if(jclazz == nullptr) {
- // exception occurred accessing class
- return nullptr;
- }
- static jmethodID mid = env->GetMethodID(jclazz, "markEndPrepare", "([B)V");
- assert(mid != nullptr);
- return mid;
- }
- /**
- * Get the Java Method: WriteBatch.Handler#markNoop
- *
- * @param env A pointer to the Java environment
- *
- * @return The Java Method ID or nullptr if the class or method id could not
- * be retieved
- */
- static jmethodID getMarkNoopMethodId(JNIEnv* env) {
- jclass jclazz = getJClass(env);
- if(jclazz == nullptr) {
- // exception occurred accessing class
- return nullptr;
- }
- static jmethodID mid = env->GetMethodID(jclazz, "markNoop", "(Z)V");
- assert(mid != nullptr);
- return mid;
- }
- /**
- * Get the Java Method: WriteBatch.Handler#markRollback
- *
- * @param env A pointer to the Java environment
- *
- * @return The Java Method ID or nullptr if the class or method id could not
- * be retieved
- */
- static jmethodID getMarkRollbackMethodId(JNIEnv* env) {
- jclass jclazz = getJClass(env);
- if(jclazz == nullptr) {
- // exception occurred accessing class
- return nullptr;
- }
- static jmethodID mid = env->GetMethodID(jclazz, "markRollback", "([B)V");
- assert(mid != nullptr);
- return mid;
- }
- /**
- * Get the Java Method: WriteBatch.Handler#markCommit
- *
- * @param env A pointer to the Java environment
- *
- * @return The Java Method ID or nullptr if the class or method id could not
- * be retieved
- */
- static jmethodID getMarkCommitMethodId(JNIEnv* env) {
- jclass jclazz = getJClass(env);
- if(jclazz == nullptr) {
- // exception occurred accessing class
- return nullptr;
- }
- static jmethodID mid = env->GetMethodID(jclazz, "markCommit", "([B)V");
- assert(mid != nullptr);
- return mid;
- }
- /**
- * Get the Java Method: WriteBatch.Handler#shouldContinue
- *
- * @param env A pointer to the Java environment
- *
- * @return The Java Method ID or nullptr if the class or method id could not
- * be retieved
- */
- static jmethodID getContinueMethodId(JNIEnv* env) {
- jclass jclazz = getJClass(env);
- if(jclazz == nullptr) {
- // exception occurred accessing class
- return nullptr;
- }
- static jmethodID mid = env->GetMethodID(jclazz, "shouldContinue", "()Z");
- assert(mid != nullptr);
- return mid;
- }
- };
- class WriteBatchSavePointJni : public JavaClass {
- public:
- /**
- * Get the Java Class org.rocksdb.WriteBatch.SavePoint
- *
- * @param env A pointer to the Java environment
- *
- * @return The Java Class or nullptr if one of the
- * ClassFormatError, ClassCircularityError, NoClassDefFoundError,
- * OutOfMemoryError or ExceptionInInitializerError exceptions is thrown
- */
- static jclass getJClass(JNIEnv* env) {
- return JavaClass::getJClass(env, "org/rocksdb/WriteBatch$SavePoint");
- }
- /**
- * Get the Java Method: HistogramData constructor
- *
- * @param env A pointer to the Java environment
- *
- * @return The Java Method ID or nullptr if the class or method id could not
- * be retieved
- */
- static jmethodID getConstructorMethodId(JNIEnv* env) {
- jclass jclazz = getJClass(env);
- if(jclazz == nullptr) {
- // exception occurred accessing class
- return nullptr;
- }
- static jmethodID mid = env->GetMethodID(jclazz, "<init>", "(JJJ)V");
- assert(mid != nullptr);
- return mid;
- }
- /**
- * Create a new Java org.rocksdb.WriteBatch.SavePoint object
- *
- * @param env A pointer to the Java environment
- * @param savePoint A pointer to ROCKSDB_NAMESPACE::WriteBatch::SavePoint
- * object
- *
- * @return A reference to a Java org.rocksdb.WriteBatch.SavePoint object, or
- * nullptr if an an exception occurs
- */
- static jobject construct(JNIEnv* env, const SavePoint &save_point) {
- jclass jclazz = getJClass(env);
- if(jclazz == nullptr) {
- // exception occurred accessing class
- return nullptr;
- }
- jmethodID mid = getConstructorMethodId(env);
- if (mid == nullptr) {
- // exception thrown: NoSuchMethodException or OutOfMemoryError
- return nullptr;
- }
- jobject jsave_point = env->NewObject(jclazz, mid,
- static_cast<jlong>(save_point.size),
- static_cast<jlong>(save_point.count),
- static_cast<jlong>(save_point.content_flags));
- if (env->ExceptionCheck()) {
- return nullptr;
- }
- return jsave_point;
- }
- };
- // The portal class for org.rocksdb.WriteBatchWithIndex
- class WriteBatchWithIndexJni
- : public RocksDBNativeClass<ROCKSDB_NAMESPACE::WriteBatchWithIndex*,
- WriteBatchWithIndexJni> {
- public:
- /**
- * Get the Java Class org.rocksdb.WriteBatchWithIndex
- *
- * @param env A pointer to the Java environment
- *
- * @return The Java Class or nullptr if one of the
- * ClassFormatError, ClassCircularityError, NoClassDefFoundError,
- * OutOfMemoryError or ExceptionInInitializerError exceptions is thrown
- */
- static jclass getJClass(JNIEnv* env) {
- return RocksDBNativeClass::getJClass(env,
- "org/rocksdb/WriteBatchWithIndex");
- }
- };
- // The portal class for org.rocksdb.HistogramData
- class HistogramDataJni : public JavaClass {
- public:
- /**
- * Get the Java Class org.rocksdb.HistogramData
- *
- * @param env A pointer to the Java environment
- *
- * @return The Java Class or nullptr if one of the
- * ClassFormatError, ClassCircularityError, NoClassDefFoundError,
- * OutOfMemoryError or ExceptionInInitializerError exceptions is thrown
- */
- static jclass getJClass(JNIEnv* env) {
- return JavaClass::getJClass(env, "org/rocksdb/HistogramData");
- }
- /**
- * Get the Java Method: HistogramData constructor
- *
- * @param env A pointer to the Java environment
- *
- * @return The Java Method ID or nullptr if the class or method id could not
- * be retieved
- */
- static jmethodID getConstructorMethodId(JNIEnv* env) {
- jclass jclazz = getJClass(env);
- if(jclazz == nullptr) {
- // exception occurred accessing class
- return nullptr;
- }
- static jmethodID mid = env->GetMethodID(jclazz, "<init>", "(DDDDDDJJD)V");
- assert(mid != nullptr);
- return mid;
- }
- };
- // The portal class for org.rocksdb.BackupableDBOptions
- class BackupableDBOptionsJni
- : public RocksDBNativeClass<ROCKSDB_NAMESPACE::BackupableDBOptions*,
- BackupableDBOptionsJni> {
- public:
- /**
- * Get the Java Class org.rocksdb.BackupableDBOptions
- *
- * @param env A pointer to the Java environment
- *
- * @return The Java Class or nullptr if one of the
- * ClassFormatError, ClassCircularityError, NoClassDefFoundError,
- * OutOfMemoryError or ExceptionInInitializerError exceptions is thrown
- */
- static jclass getJClass(JNIEnv* env) {
- return RocksDBNativeClass::getJClass(env,
- "org/rocksdb/BackupableDBOptions");
- }
- };
- // The portal class for org.rocksdb.BackupEngine
- class BackupEngineJni
- : public RocksDBNativeClass<ROCKSDB_NAMESPACE::BackupEngine*,
- BackupEngineJni> {
- public:
- /**
- * Get the Java Class org.rocksdb.BackupableEngine
- *
- * @param env A pointer to the Java environment
- *
- * @return The Java Class or nullptr if one of the
- * ClassFormatError, ClassCircularityError, NoClassDefFoundError,
- * OutOfMemoryError or ExceptionInInitializerError exceptions is thrown
- */
- static jclass getJClass(JNIEnv* env) {
- return RocksDBNativeClass::getJClass(env, "org/rocksdb/BackupEngine");
- }
- };
- // The portal class for org.rocksdb.RocksIterator
- class IteratorJni
- : public RocksDBNativeClass<ROCKSDB_NAMESPACE::Iterator*, IteratorJni> {
- public:
- /**
- * Get the Java Class org.rocksdb.RocksIterator
- *
- * @param env A pointer to the Java environment
- *
- * @return The Java Class or nullptr if one of the
- * ClassFormatError, ClassCircularityError, NoClassDefFoundError,
- * OutOfMemoryError or ExceptionInInitializerError exceptions is thrown
- */
- static jclass getJClass(JNIEnv* env) {
- return RocksDBNativeClass::getJClass(env, "org/rocksdb/RocksIterator");
- }
- };
- // The portal class for org.rocksdb.Filter
- class FilterJni
- : public RocksDBNativeClass<
- std::shared_ptr<ROCKSDB_NAMESPACE::FilterPolicy>*, FilterJni> {
- public:
- /**
- * Get the Java Class org.rocksdb.Filter
- *
- * @param env A pointer to the Java environment
- *
- * @return The Java Class or nullptr if one of the
- * ClassFormatError, ClassCircularityError, NoClassDefFoundError,
- * OutOfMemoryError or ExceptionInInitializerError exceptions is thrown
- */
- static jclass getJClass(JNIEnv* env) {
- return RocksDBNativeClass::getJClass(env, "org/rocksdb/Filter");
- }
- };
- // The portal class for org.rocksdb.ColumnFamilyHandle
- class ColumnFamilyHandleJni
- : public RocksDBNativeClass<ROCKSDB_NAMESPACE::ColumnFamilyHandle*,
- ColumnFamilyHandleJni> {
- public:
- /**
- * Get the Java Class org.rocksdb.ColumnFamilyHandle
- *
- * @param env A pointer to the Java environment
- *
- * @return The Java Class or nullptr if one of the
- * ClassFormatError, ClassCircularityError, NoClassDefFoundError,
- * OutOfMemoryError or ExceptionInInitializerError exceptions is thrown
- */
- static jclass getJClass(JNIEnv* env) {
- return RocksDBNativeClass::getJClass(env,
- "org/rocksdb/ColumnFamilyHandle");
- }
- };
- // The portal class for org.rocksdb.FlushOptions
- class FlushOptionsJni
- : public RocksDBNativeClass<ROCKSDB_NAMESPACE::FlushOptions*,
- FlushOptionsJni> {
- public:
- /**
- * Get the Java Class org.rocksdb.FlushOptions
- *
- * @param env A pointer to the Java environment
- *
- * @return The Java Class or nullptr if one of the
- * ClassFormatError, ClassCircularityError, NoClassDefFoundError,
- * OutOfMemoryError or ExceptionInInitializerError exceptions is thrown
- */
- static jclass getJClass(JNIEnv* env) {
- return RocksDBNativeClass::getJClass(env, "org/rocksdb/FlushOptions");
- }
- };
- // The portal class for org.rocksdb.ComparatorOptions
- class ComparatorOptionsJni
- : public RocksDBNativeClass<
- ROCKSDB_NAMESPACE::ComparatorJniCallbackOptions*,
- ComparatorOptionsJni> {
- public:
- /**
- * Get the Java Class org.rocksdb.ComparatorOptions
- *
- * @param env A pointer to the Java environment
- *
- * @return The Java Class or nullptr if one of the
- * ClassFormatError, ClassCircularityError, NoClassDefFoundError,
- * OutOfMemoryError or ExceptionInInitializerError exceptions is thrown
- */
- static jclass getJClass(JNIEnv* env) {
- return RocksDBNativeClass::getJClass(env, "org/rocksdb/ComparatorOptions");
- }
- };
- // The portal class for org.rocksdb.AbstractCompactionFilterFactory
- class AbstractCompactionFilterFactoryJni
- : public RocksDBNativeClass<
- const ROCKSDB_NAMESPACE::CompactionFilterFactoryJniCallback*,
- AbstractCompactionFilterFactoryJni> {
- public:
- /**
- * Get the Java Class org.rocksdb.AbstractCompactionFilterFactory
- *
- * @param env A pointer to the Java environment
- *
- * @return The Java Class or nullptr if one of the
- * ClassFormatError, ClassCircularityError, NoClassDefFoundError,
- * OutOfMemoryError or ExceptionInInitializerError exceptions is thrown
- */
- static jclass getJClass(JNIEnv* env) {
- return RocksDBNativeClass::getJClass(env,
- "org/rocksdb/AbstractCompactionFilterFactory");
- }
- /**
- * Get the Java Method: AbstractCompactionFilterFactory#name
- *
- * @param env A pointer to the Java environment
- *
- * @return The Java Method ID or nullptr if the class or method id could not
- * be retieved
- */
- static jmethodID getNameMethodId(JNIEnv* env) {
- jclass jclazz = getJClass(env);
- if(jclazz == nullptr) {
- // exception occurred accessing class
- return nullptr;
- }
- static jmethodID mid = env->GetMethodID(
- jclazz, "name", "()Ljava/lang/String;");
- assert(mid != nullptr);
- return mid;
- }
- /**
- * Get the Java Method: AbstractCompactionFilterFactory#createCompactionFilter
- *
- * @param env A pointer to the Java environment
- *
- * @return The Java Method ID or nullptr if the class or method id could not
- * be retieved
- */
- static jmethodID getCreateCompactionFilterMethodId(JNIEnv* env) {
- jclass jclazz = getJClass(env);
- if(jclazz == nullptr) {
- // exception occurred accessing class
- return nullptr;
- }
- static jmethodID mid = env->GetMethodID(jclazz,
- "createCompactionFilter",
- "(ZZ)J");
- assert(mid != nullptr);
- return mid;
- }
- };
- // The portal class for org.rocksdb.AbstractTransactionNotifier
- class AbstractTransactionNotifierJni
- : public RocksDBNativeClass<
- const ROCKSDB_NAMESPACE::TransactionNotifierJniCallback*,
- AbstractTransactionNotifierJni> {
- public:
- static jclass getJClass(JNIEnv* env) {
- return RocksDBNativeClass::getJClass(env,
- "org/rocksdb/AbstractTransactionNotifier");
- }
- // Get the java method `snapshotCreated`
- // of org.rocksdb.AbstractTransactionNotifier.
- static jmethodID getSnapshotCreatedMethodId(JNIEnv* env) {
- jclass jclazz = getJClass(env);
- if(jclazz == nullptr) {
- // exception occurred accessing class
- return nullptr;
- }
- static jmethodID mid = env->GetMethodID(jclazz, "snapshotCreated", "(J)V");
- assert(mid != nullptr);
- return mid;
- }
- };
- // The portal class for org.rocksdb.AbstractComparatorJniBridge
- class AbstractComparatorJniBridge : public JavaClass {
- public:
- /**
- * Get the Java Class org.rocksdb.AbstractComparatorJniBridge
- *
- * @param env A pointer to the Java environment
- *
- * @return The Java Class or nullptr if one of the
- * ClassFormatError, ClassCircularityError, NoClassDefFoundError,
- * OutOfMemoryError or ExceptionInInitializerError exceptions is thrown
- */
- static jclass getJClass(JNIEnv* env) {
- return JavaClass::getJClass(env,
- "org/rocksdb/AbstractComparatorJniBridge");
- }
- /**
- * Get the Java Method: Comparator#compareInternal
- *
- * @param env A pointer to the Java environment
- * @param jclazz the AbstractComparatorJniBridge class
- *
- * @return The Java Method ID or nullptr if the class or method id could not
- * be retieved
- */
- static jmethodID getCompareInternalMethodId(JNIEnv* env, jclass jclazz) {
- static jmethodID mid =
- env->GetStaticMethodID(jclazz, "compareInternal",
- "(Lorg/rocksdb/AbstractComparator;Ljava/nio/ByteBuffer;ILjava/nio/ByteBuffer;I)I");
- assert(mid != nullptr);
- return mid;
- }
- /**
- * Get the Java Method: Comparator#findShortestSeparatorInternal
- *
- * @param env A pointer to the Java environment
- * @param jclazz the AbstractComparatorJniBridge class
- *
- * @return The Java Method ID or nullptr if the class or method id could not
- * be retieved
- */
- static jmethodID getFindShortestSeparatorInternalMethodId(JNIEnv* env, jclass jclazz) {
- static jmethodID mid =
- env->GetStaticMethodID(jclazz, "findShortestSeparatorInternal",
- "(Lorg/rocksdb/AbstractComparator;Ljava/nio/ByteBuffer;ILjava/nio/ByteBuffer;I)I");
- assert(mid != nullptr);
- return mid;
- }
- /**
- * Get the Java Method: Comparator#findShortSuccessorInternal
- *
- * @param env A pointer to the Java environment
- * @param jclazz the AbstractComparatorJniBridge class
- *
- * @return The Java Method ID or nullptr if the class or method id could not
- * be retieved
- */
- static jmethodID getFindShortSuccessorInternalMethodId(JNIEnv* env, jclass jclazz) {
- static jmethodID mid =
- env->GetStaticMethodID(jclazz, "findShortSuccessorInternal",
- "(Lorg/rocksdb/AbstractComparator;Ljava/nio/ByteBuffer;I)I");
- assert(mid != nullptr);
- return mid;
- }
- };
- // The portal class for org.rocksdb.AbstractComparator
- class AbstractComparatorJni
- : public RocksDBNativeClass<const ROCKSDB_NAMESPACE::ComparatorJniCallback*,
- AbstractComparatorJni> {
- public:
- /**
- * Get the Java Class org.rocksdb.AbstractComparator
- *
- * @param env A pointer to the Java environment
- *
- * @return The Java Class or nullptr if one of the
- * ClassFormatError, ClassCircularityError, NoClassDefFoundError,
- * OutOfMemoryError or ExceptionInInitializerError exceptions is thrown
- */
- static jclass getJClass(JNIEnv* env) {
- return RocksDBNativeClass::getJClass(env,
- "org/rocksdb/AbstractComparator");
- }
- /**
- * Get the Java Method: Comparator#name
- *
- * @param env A pointer to the Java environment
- *
- * @return The Java Method ID or nullptr if the class or method id could not
- * be retieved
- */
- static jmethodID getNameMethodId(JNIEnv* env) {
- jclass jclazz = getJClass(env);
- if(jclazz == nullptr) {
- // exception occurred accessing class
- return nullptr;
- }
- static jmethodID mid =
- env->GetMethodID(jclazz, "name", "()Ljava/lang/String;");
- assert(mid != nullptr);
- return mid;
- }
- };
- // The portal class for org.rocksdb.AbstractSlice
- class AbstractSliceJni
- : public NativeRocksMutableObject<const ROCKSDB_NAMESPACE::Slice*,
- AbstractSliceJni> {
- public:
- /**
- * Get the Java Class org.rocksdb.AbstractSlice
- *
- * @param env A pointer to the Java environment
- *
- * @return The Java Class or nullptr if one of the
- * ClassFormatError, ClassCircularityError, NoClassDefFoundError,
- * OutOfMemoryError or ExceptionInInitializerError exceptions is thrown
- */
- static jclass getJClass(JNIEnv* env) {
- return RocksDBNativeClass::getJClass(env, "org/rocksdb/AbstractSlice");
- }
- };
- // The portal class for org.rocksdb.Slice
- class SliceJni
- : public NativeRocksMutableObject<const ROCKSDB_NAMESPACE::Slice*,
- AbstractSliceJni> {
- public:
- /**
- * Get the Java Class org.rocksdb.Slice
- *
- * @param env A pointer to the Java environment
- *
- * @return The Java Class or nullptr if one of the
- * ClassFormatError, ClassCircularityError, NoClassDefFoundError,
- * OutOfMemoryError or ExceptionInInitializerError exceptions is thrown
- */
- static jclass getJClass(JNIEnv* env) {
- return RocksDBNativeClass::getJClass(env, "org/rocksdb/Slice");
- }
- /**
- * Constructs a Slice object
- *
- * @param env A pointer to the Java environment
- *
- * @return A reference to a Java Slice object, or a nullptr if an
- * exception occurs
- */
- static jobject construct0(JNIEnv* env) {
- jclass jclazz = getJClass(env);
- if(jclazz == nullptr) {
- // exception occurred accessing class
- return nullptr;
- }
- static jmethodID mid = env->GetMethodID(jclazz, "<init>", "()V");
- if(mid == nullptr) {
- // exception occurred accessing method
- return nullptr;
- }
- jobject jslice = env->NewObject(jclazz, mid);
- if(env->ExceptionCheck()) {
- return nullptr;
- }
- return jslice;
- }
- };
- // The portal class for org.rocksdb.DirectSlice
- class DirectSliceJni
- : public NativeRocksMutableObject<const ROCKSDB_NAMESPACE::Slice*,
- AbstractSliceJni> {
- public:
- /**
- * Get the Java Class org.rocksdb.DirectSlice
- *
- * @param env A pointer to the Java environment
- *
- * @return The Java Class or nullptr if one of the
- * ClassFormatError, ClassCircularityError, NoClassDefFoundError,
- * OutOfMemoryError or ExceptionInInitializerError exceptions is thrown
- */
- static jclass getJClass(JNIEnv* env) {
- return RocksDBNativeClass::getJClass(env, "org/rocksdb/DirectSlice");
- }
- /**
- * Constructs a DirectSlice object
- *
- * @param env A pointer to the Java environment
- *
- * @return A reference to a Java DirectSlice object, or a nullptr if an
- * exception occurs
- */
- static jobject construct0(JNIEnv* env) {
- jclass jclazz = getJClass(env);
- if(jclazz == nullptr) {
- // exception occurred accessing class
- return nullptr;
- }
- static jmethodID mid = env->GetMethodID(jclazz, "<init>", "()V");
- if(mid == nullptr) {
- // exception occurred accessing method
- return nullptr;
- }
- jobject jdirect_slice = env->NewObject(jclazz, mid);
- if(env->ExceptionCheck()) {
- return nullptr;
- }
- return jdirect_slice;
- }
- };
- // The portal class for org.rocksdb.BackupInfo
- class BackupInfoJni : public JavaClass {
- public:
- /**
- * Get the Java Class org.rocksdb.BackupInfo
- *
- * @param env A pointer to the Java environment
- *
- * @return The Java Class or nullptr if one of the
- * ClassFormatError, ClassCircularityError, NoClassDefFoundError,
- * OutOfMemoryError or ExceptionInInitializerError exceptions is thrown
- */
- static jclass getJClass(JNIEnv* env) {
- return JavaClass::getJClass(env, "org/rocksdb/BackupInfo");
- }
- /**
- * Constructs a BackupInfo object
- *
- * @param env A pointer to the Java environment
- * @param backup_id id of the backup
- * @param timestamp timestamp of the backup
- * @param size size of the backup
- * @param number_files number of files related to the backup
- * @param app_metadata application specific metadata
- *
- * @return A reference to a Java BackupInfo object, or a nullptr if an
- * exception occurs
- */
- static jobject construct0(JNIEnv* env, uint32_t backup_id, int64_t timestamp,
- uint64_t size, uint32_t number_files,
- const std::string& app_metadata) {
- jclass jclazz = getJClass(env);
- if(jclazz == nullptr) {
- // exception occurred accessing class
- return nullptr;
- }
- static jmethodID mid =
- env->GetMethodID(jclazz, "<init>", "(IJJILjava/lang/String;)V");
- if(mid == nullptr) {
- // exception occurred accessing method
- return nullptr;
- }
- jstring japp_metadata = nullptr;
- if (app_metadata != nullptr) {
- japp_metadata = env->NewStringUTF(app_metadata.c_str());
- if (japp_metadata == nullptr) {
- // exception occurred creating java string
- return nullptr;
- }
- }
- jobject jbackup_info = env->NewObject(jclazz, mid, backup_id, timestamp,
- size, number_files, japp_metadata);
- if(env->ExceptionCheck()) {
- env->DeleteLocalRef(japp_metadata);
- return nullptr;
- }
- return jbackup_info;
- }
- };
- class BackupInfoListJni {
- public:
- /**
- * Converts a C++ std::vector<BackupInfo> object to
- * a Java ArrayList<org.rocksdb.BackupInfo> object
- *
- * @param env A pointer to the Java environment
- * @param backup_infos A vector of BackupInfo
- *
- * @return Either a reference to a Java ArrayList object, or a nullptr
- * if an exception occurs
- */
- static jobject getBackupInfo(JNIEnv* env,
- std::vector<BackupInfo> backup_infos) {
- jclass jarray_list_clazz =
- ROCKSDB_NAMESPACE::ListJni::getArrayListClass(env);
- if(jarray_list_clazz == nullptr) {
- // exception occurred accessing class
- return nullptr;
- }
- jmethodID cstr_mid =
- ROCKSDB_NAMESPACE::ListJni::getArrayListConstructorMethodId(env);
- if(cstr_mid == nullptr) {
- // exception occurred accessing method
- return nullptr;
- }
- jmethodID add_mid = ROCKSDB_NAMESPACE::ListJni::getListAddMethodId(env);
- if(add_mid == nullptr) {
- // exception occurred accessing method
- return nullptr;
- }
- // create java list
- jobject jbackup_info_handle_list =
- env->NewObject(jarray_list_clazz, cstr_mid, backup_infos.size());
- if(env->ExceptionCheck()) {
- // exception occurred constructing object
- return nullptr;
- }
- // insert in java list
- auto end = backup_infos.end();
- for (auto it = backup_infos.begin(); it != end; ++it) {
- auto backup_info = *it;
- jobject obj = ROCKSDB_NAMESPACE::BackupInfoJni::construct0(
- env, backup_info.backup_id, backup_info.timestamp, backup_info.size,
- backup_info.number_files, backup_info.app_metadata);
- if(env->ExceptionCheck()) {
- // exception occurred constructing object
- if(obj != nullptr) {
- env->DeleteLocalRef(obj);
- }
- if(jbackup_info_handle_list != nullptr) {
- env->DeleteLocalRef(jbackup_info_handle_list);
- }
- return nullptr;
- }
- jboolean rs =
- env->CallBooleanMethod(jbackup_info_handle_list, add_mid, obj);
- if(env->ExceptionCheck() || rs == JNI_FALSE) {
- // exception occurred calling method, or could not add
- if(obj != nullptr) {
- env->DeleteLocalRef(obj);
- }
- if(jbackup_info_handle_list != nullptr) {
- env->DeleteLocalRef(jbackup_info_handle_list);
- }
- return nullptr;
- }
- }
- return jbackup_info_handle_list;
- }
- };
- // The portal class for org.rocksdb.WBWIRocksIterator
- class WBWIRocksIteratorJni : public JavaClass {
- public:
- /**
- * Get the Java Class org.rocksdb.WBWIRocksIterator
- *
- * @param env A pointer to the Java environment
- *
- * @return The Java Class or nullptr if one of the
- * ClassFormatError, ClassCircularityError, NoClassDefFoundError,
- * OutOfMemoryError or ExceptionInInitializerError exceptions is thrown
- */
- static jclass getJClass(JNIEnv* env) {
- return JavaClass::getJClass(env, "org/rocksdb/WBWIRocksIterator");
- }
- /**
- * Get the Java Field: WBWIRocksIterator#entry
- *
- * @param env A pointer to the Java environment
- *
- * @return The Java Field ID or nullptr if the class or field id could not
- * be retieved
- */
- static jfieldID getWriteEntryField(JNIEnv* env) {
- jclass jclazz = getJClass(env);
- if(jclazz == nullptr) {
- // exception occurred accessing class
- return nullptr;
- }
- static jfieldID fid =
- env->GetFieldID(jclazz, "entry",
- "Lorg/rocksdb/WBWIRocksIterator$WriteEntry;");
- assert(fid != nullptr);
- return fid;
- }
- /**
- * Gets the value of the WBWIRocksIterator#entry
- *
- * @param env A pointer to the Java environment
- * @param jwbwi_rocks_iterator A reference to a WBWIIterator
- *
- * @return A reference to a Java WBWIRocksIterator.WriteEntry object, or
- * a nullptr if an exception occurs
- */
- static jobject getWriteEntry(JNIEnv* env, jobject jwbwi_rocks_iterator) {
- assert(jwbwi_rocks_iterator != nullptr);
- jfieldID jwrite_entry_field = getWriteEntryField(env);
- if(jwrite_entry_field == nullptr) {
- // exception occurred accessing the field
- return nullptr;
- }
- jobject jwe = env->GetObjectField(jwbwi_rocks_iterator, jwrite_entry_field);
- assert(jwe != nullptr);
- return jwe;
- }
- };
- // The portal class for org.rocksdb.WBWIRocksIterator.WriteType
- class WriteTypeJni : public JavaClass {
- public:
- /**
- * Get the PUT enum field value of WBWIRocksIterator.WriteType
- *
- * @param env A pointer to the Java environment
- *
- * @return A reference to the enum field value or a nullptr if
- * the enum field value could not be retrieved
- */
- static jobject PUT(JNIEnv* env) {
- return getEnum(env, "PUT");
- }
- /**
- * Get the MERGE enum field value of WBWIRocksIterator.WriteType
- *
- * @param env A pointer to the Java environment
- *
- * @return A reference to the enum field value or a nullptr if
- * the enum field value could not be retrieved
- */
- static jobject MERGE(JNIEnv* env) {
- return getEnum(env, "MERGE");
- }
- /**
- * Get the DELETE enum field value of WBWIRocksIterator.WriteType
- *
- * @param env A pointer to the Java environment
- *
- * @return A reference to the enum field value or a nullptr if
- * the enum field value could not be retrieved
- */
- static jobject DELETE(JNIEnv* env) {
- return getEnum(env, "DELETE");
- }
- /**
- * Get the LOG enum field value of WBWIRocksIterator.WriteType
- *
- * @param env A pointer to the Java environment
- *
- * @return A reference to the enum field value or a nullptr if
- * the enum field value could not be retrieved
- */
- static jobject LOG(JNIEnv* env) {
- return getEnum(env, "LOG");
- }
- // Returns the equivalent org.rocksdb.WBWIRocksIterator.WriteType for the
- // provided C++ ROCKSDB_NAMESPACE::WriteType enum
- static jbyte toJavaWriteType(const ROCKSDB_NAMESPACE::WriteType& writeType) {
- switch (writeType) {
- case ROCKSDB_NAMESPACE::WriteType::kPutRecord:
- return 0x0;
- case ROCKSDB_NAMESPACE::WriteType::kMergeRecord:
- return 0x1;
- case ROCKSDB_NAMESPACE::WriteType::kDeleteRecord:
- return 0x2;
- case ROCKSDB_NAMESPACE::WriteType::kSingleDeleteRecord:
- return 0x3;
- case ROCKSDB_NAMESPACE::WriteType::kDeleteRangeRecord:
- return 0x4;
- case ROCKSDB_NAMESPACE::WriteType::kLogDataRecord:
- return 0x5;
- case ROCKSDB_NAMESPACE::WriteType::kXIDRecord:
- return 0x6;
- default:
- return 0x7F; // undefined
- }
- }
- private:
- /**
- * Get the Java Class org.rocksdb.WBWIRocksIterator.WriteType
- *
- * @param env A pointer to the Java environment
- *
- * @return The Java Class or nullptr if one of the
- * ClassFormatError, ClassCircularityError, NoClassDefFoundError,
- * OutOfMemoryError or ExceptionInInitializerError exceptions is thrown
- */
- static jclass getJClass(JNIEnv* env) {
- return JavaClass::getJClass(env, "org/rocksdb/WBWIRocksIterator$WriteType");
- }
- /**
- * Get an enum field of org.rocksdb.WBWIRocksIterator.WriteType
- *
- * @param env A pointer to the Java environment
- * @param name The name of the enum field
- *
- * @return A reference to the enum field value or a nullptr if
- * the enum field value could not be retrieved
- */
- static jobject getEnum(JNIEnv* env, const char name[]) {
- jclass jclazz = getJClass(env);
- if(jclazz == nullptr) {
- // exception occurred accessing class
- return nullptr;
- }
- jfieldID jfid =
- env->GetStaticFieldID(jclazz, name,
- "Lorg/rocksdb/WBWIRocksIterator$WriteType;");
- if(env->ExceptionCheck()) {
- // exception occurred while getting field
- return nullptr;
- } else if(jfid == nullptr) {
- return nullptr;
- }
- jobject jwrite_type = env->GetStaticObjectField(jclazz, jfid);
- assert(jwrite_type != nullptr);
- return jwrite_type;
- }
- };
- // The portal class for org.rocksdb.WBWIRocksIterator.WriteEntry
- class WriteEntryJni : public JavaClass {
- public:
- /**
- * Get the Java Class org.rocksdb.WBWIRocksIterator.WriteEntry
- *
- * @param env A pointer to the Java environment
- *
- * @return The Java Class or nullptr if one of the
- * ClassFormatError, ClassCircularityError, NoClassDefFoundError,
- * OutOfMemoryError or ExceptionInInitializerError exceptions is thrown
- */
- static jclass getJClass(JNIEnv* env) {
- return JavaClass::getJClass(env, "org/rocksdb/WBWIRocksIterator$WriteEntry");
- }
- };
- // The portal class for org.rocksdb.InfoLogLevel
- class InfoLogLevelJni : public JavaClass {
- public:
- /**
- * Get the DEBUG_LEVEL enum field value of InfoLogLevel
- *
- * @param env A pointer to the Java environment
- *
- * @return A reference to the enum field value or a nullptr if
- * the enum field value could not be retrieved
- */
- static jobject DEBUG_LEVEL(JNIEnv* env) {
- return getEnum(env, "DEBUG_LEVEL");
- }
- /**
- * Get the INFO_LEVEL enum field value of InfoLogLevel
- *
- * @param env A pointer to the Java environment
- *
- * @return A reference to the enum field value or a nullptr if
- * the enum field value could not be retrieved
- */
- static jobject INFO_LEVEL(JNIEnv* env) {
- return getEnum(env, "INFO_LEVEL");
- }
- /**
- * Get the WARN_LEVEL enum field value of InfoLogLevel
- *
- * @param env A pointer to the Java environment
- *
- * @return A reference to the enum field value or a nullptr if
- * the enum field value could not be retrieved
- */
- static jobject WARN_LEVEL(JNIEnv* env) {
- return getEnum(env, "WARN_LEVEL");
- }
- /**
- * Get the ERROR_LEVEL enum field value of InfoLogLevel
- *
- * @param env A pointer to the Java environment
- *
- * @return A reference to the enum field value or a nullptr if
- * the enum field value could not be retrieved
- */
- static jobject ERROR_LEVEL(JNIEnv* env) {
- return getEnum(env, "ERROR_LEVEL");
- }
- /**
- * Get the FATAL_LEVEL enum field value of InfoLogLevel
- *
- * @param env A pointer to the Java environment
- *
- * @return A reference to the enum field value or a nullptr if
- * the enum field value could not be retrieved
- */
- static jobject FATAL_LEVEL(JNIEnv* env) {
- return getEnum(env, "FATAL_LEVEL");
- }
- /**
- * Get the HEADER_LEVEL enum field value of InfoLogLevel
- *
- * @param env A pointer to the Java environment
- *
- * @return A reference to the enum field value or a nullptr if
- * the enum field value could not be retrieved
- */
- static jobject HEADER_LEVEL(JNIEnv* env) {
- return getEnum(env, "HEADER_LEVEL");
- }
- private:
- /**
- * Get the Java Class org.rocksdb.InfoLogLevel
- *
- * @param env A pointer to the Java environment
- *
- * @return The Java Class or nullptr if one of the
- * ClassFormatError, ClassCircularityError, NoClassDefFoundError,
- * OutOfMemoryError or ExceptionInInitializerError exceptions is thrown
- */
- static jclass getJClass(JNIEnv* env) {
- return JavaClass::getJClass(env, "org/rocksdb/InfoLogLevel");
- }
- /**
- * Get an enum field of org.rocksdb.InfoLogLevel
- *
- * @param env A pointer to the Java environment
- * @param name The name of the enum field
- *
- * @return A reference to the enum field value or a nullptr if
- * the enum field value could not be retrieved
- */
- static jobject getEnum(JNIEnv* env, const char name[]) {
- jclass jclazz = getJClass(env);
- if(jclazz == nullptr) {
- // exception occurred accessing class
- return nullptr;
- }
- jfieldID jfid =
- env->GetStaticFieldID(jclazz, name, "Lorg/rocksdb/InfoLogLevel;");
- if(env->ExceptionCheck()) {
- // exception occurred while getting field
- return nullptr;
- } else if(jfid == nullptr) {
- return nullptr;
- }
- jobject jinfo_log_level = env->GetStaticObjectField(jclazz, jfid);
- assert(jinfo_log_level != nullptr);
- return jinfo_log_level;
- }
- };
- // The portal class for org.rocksdb.Logger
- class LoggerJni
- : public RocksDBNativeClass<
- std::shared_ptr<ROCKSDB_NAMESPACE::LoggerJniCallback>*, LoggerJni> {
- public:
- /**
- * Get the Java Class org/rocksdb/Logger
- *
- * @param env A pointer to the Java environment
- *
- * @return The Java Class or nullptr if one of the
- * ClassFormatError, ClassCircularityError, NoClassDefFoundError,
- * OutOfMemoryError or ExceptionInInitializerError exceptions is thrown
- */
- static jclass getJClass(JNIEnv* env) {
- return RocksDBNativeClass::getJClass(env, "org/rocksdb/Logger");
- }
- /**
- * Get the Java Method: Logger#log
- *
- * @param env A pointer to the Java environment
- *
- * @return The Java Method ID or nullptr if the class or method id could not
- * be retieved
- */
- static jmethodID getLogMethodId(JNIEnv* env) {
- jclass jclazz = getJClass(env);
- if(jclazz == nullptr) {
- // exception occurred accessing class
- return nullptr;
- }
- static jmethodID mid =
- env->GetMethodID(jclazz, "log",
- "(Lorg/rocksdb/InfoLogLevel;Ljava/lang/String;)V");
- assert(mid != nullptr);
- return mid;
- }
- };
- // The portal class for org.rocksdb.TransactionLogIterator.BatchResult
- class BatchResultJni : public JavaClass {
- public:
- /**
- * Get the Java Class org.rocksdb.TransactionLogIterator.BatchResult
- *
- * @param env A pointer to the Java environment
- *
- * @return The Java Class or nullptr if one of the
- * ClassFormatError, ClassCircularityError, NoClassDefFoundError,
- * OutOfMemoryError or ExceptionInInitializerError exceptions is thrown
- */
- static jclass getJClass(JNIEnv* env) {
- return JavaClass::getJClass(env,
- "org/rocksdb/TransactionLogIterator$BatchResult");
- }
- /**
- * Create a new Java org.rocksdb.TransactionLogIterator.BatchResult object
- * with the same properties as the provided C++ ROCKSDB_NAMESPACE::BatchResult
- * object
- *
- * @param env A pointer to the Java environment
- * @param batch_result The ROCKSDB_NAMESPACE::BatchResult object
- *
- * @return A reference to a Java
- * org.rocksdb.TransactionLogIterator.BatchResult object,
- * or nullptr if an an exception occurs
- */
- static jobject construct(JNIEnv* env,
- ROCKSDB_NAMESPACE::BatchResult& batch_result) {
- jclass jclazz = getJClass(env);
- if(jclazz == nullptr) {
- // exception occurred accessing class
- return nullptr;
- }
- jmethodID mid = env->GetMethodID(
- jclazz, "<init>", "(JJ)V");
- if(mid == nullptr) {
- // exception thrown: NoSuchMethodException or OutOfMemoryError
- return nullptr;
- }
- jobject jbatch_result = env->NewObject(jclazz, mid,
- batch_result.sequence, batch_result.writeBatchPtr.get());
- if(jbatch_result == nullptr) {
- // exception thrown: InstantiationException or OutOfMemoryError
- return nullptr;
- }
- batch_result.writeBatchPtr.release();
- return jbatch_result;
- }
- };
- // The portal class for org.rocksdb.BottommostLevelCompaction
- class BottommostLevelCompactionJni {
- public:
- // Returns the equivalent org.rocksdb.BottommostLevelCompaction for the
- // provided C++ ROCKSDB_NAMESPACE::BottommostLevelCompaction enum
- static jint toJavaBottommostLevelCompaction(
- const ROCKSDB_NAMESPACE::BottommostLevelCompaction&
- bottommost_level_compaction) {
- switch(bottommost_level_compaction) {
- case ROCKSDB_NAMESPACE::BottommostLevelCompaction::kSkip:
- return 0x0;
- case ROCKSDB_NAMESPACE::BottommostLevelCompaction::
- kIfHaveCompactionFilter:
- return 0x1;
- case ROCKSDB_NAMESPACE::BottommostLevelCompaction::kForce:
- return 0x2;
- case ROCKSDB_NAMESPACE::BottommostLevelCompaction::kForceOptimized:
- return 0x3;
- default:
- return 0x7F; // undefined
- }
- }
- // Returns the equivalent C++ ROCKSDB_NAMESPACE::BottommostLevelCompaction
- // enum for the provided Java org.rocksdb.BottommostLevelCompaction
- static ROCKSDB_NAMESPACE::BottommostLevelCompaction
- toCppBottommostLevelCompaction(jint bottommost_level_compaction) {
- switch(bottommost_level_compaction) {
- case 0x0:
- return ROCKSDB_NAMESPACE::BottommostLevelCompaction::kSkip;
- case 0x1:
- return ROCKSDB_NAMESPACE::BottommostLevelCompaction::
- kIfHaveCompactionFilter;
- case 0x2:
- return ROCKSDB_NAMESPACE::BottommostLevelCompaction::kForce;
- case 0x3:
- return ROCKSDB_NAMESPACE::BottommostLevelCompaction::kForceOptimized;
- default:
- // undefined/default
- return ROCKSDB_NAMESPACE::BottommostLevelCompaction::
- kIfHaveCompactionFilter;
- }
- }
- };
- // The portal class for org.rocksdb.CompactionStopStyle
- class CompactionStopStyleJni {
- public:
- // Returns the equivalent org.rocksdb.CompactionStopStyle for the provided
- // C++ ROCKSDB_NAMESPACE::CompactionStopStyle enum
- static jbyte toJavaCompactionStopStyle(
- const ROCKSDB_NAMESPACE::CompactionStopStyle& compaction_stop_style) {
- switch(compaction_stop_style) {
- case ROCKSDB_NAMESPACE::CompactionStopStyle::
- kCompactionStopStyleSimilarSize:
- return 0x0;
- case ROCKSDB_NAMESPACE::CompactionStopStyle::
- kCompactionStopStyleTotalSize:
- return 0x1;
- default:
- return 0x7F; // undefined
- }
- }
- // Returns the equivalent C++ ROCKSDB_NAMESPACE::CompactionStopStyle enum for
- // the provided Java org.rocksdb.CompactionStopStyle
- static ROCKSDB_NAMESPACE::CompactionStopStyle toCppCompactionStopStyle(
- jbyte jcompaction_stop_style) {
- switch(jcompaction_stop_style) {
- case 0x0:
- return ROCKSDB_NAMESPACE::CompactionStopStyle::
- kCompactionStopStyleSimilarSize;
- case 0x1:
- return ROCKSDB_NAMESPACE::CompactionStopStyle::
- kCompactionStopStyleTotalSize;
- default:
- // undefined/default
- return ROCKSDB_NAMESPACE::CompactionStopStyle::
- kCompactionStopStyleSimilarSize;
- }
- }
- };
- // The portal class for org.rocksdb.CompressionType
- class CompressionTypeJni {
- public:
- // Returns the equivalent org.rocksdb.CompressionType for the provided
- // C++ ROCKSDB_NAMESPACE::CompressionType enum
- static jbyte toJavaCompressionType(
- const ROCKSDB_NAMESPACE::CompressionType& compression_type) {
- switch(compression_type) {
- case ROCKSDB_NAMESPACE::CompressionType::kNoCompression:
- return 0x0;
- case ROCKSDB_NAMESPACE::CompressionType::kSnappyCompression:
- return 0x1;
- case ROCKSDB_NAMESPACE::CompressionType::kZlibCompression:
- return 0x2;
- case ROCKSDB_NAMESPACE::CompressionType::kBZip2Compression:
- return 0x3;
- case ROCKSDB_NAMESPACE::CompressionType::kLZ4Compression:
- return 0x4;
- case ROCKSDB_NAMESPACE::CompressionType::kLZ4HCCompression:
- return 0x5;
- case ROCKSDB_NAMESPACE::CompressionType::kXpressCompression:
- return 0x6;
- case ROCKSDB_NAMESPACE::CompressionType::kZSTD:
- return 0x7;
- case ROCKSDB_NAMESPACE::CompressionType::kDisableCompressionOption:
- default:
- return 0x7F;
- }
- }
- // Returns the equivalent C++ ROCKSDB_NAMESPACE::CompressionType enum for the
- // provided Java org.rocksdb.CompressionType
- static ROCKSDB_NAMESPACE::CompressionType toCppCompressionType(
- jbyte jcompression_type) {
- switch(jcompression_type) {
- case 0x0:
- return ROCKSDB_NAMESPACE::CompressionType::kNoCompression;
- case 0x1:
- return ROCKSDB_NAMESPACE::CompressionType::kSnappyCompression;
- case 0x2:
- return ROCKSDB_NAMESPACE::CompressionType::kZlibCompression;
- case 0x3:
- return ROCKSDB_NAMESPACE::CompressionType::kBZip2Compression;
- case 0x4:
- return ROCKSDB_NAMESPACE::CompressionType::kLZ4Compression;
- case 0x5:
- return ROCKSDB_NAMESPACE::CompressionType::kLZ4HCCompression;
- case 0x6:
- return ROCKSDB_NAMESPACE::CompressionType::kXpressCompression;
- case 0x7:
- return ROCKSDB_NAMESPACE::CompressionType::kZSTD;
- case 0x7F:
- default:
- return ROCKSDB_NAMESPACE::CompressionType::kDisableCompressionOption;
- }
- }
- };
- // The portal class for org.rocksdb.CompactionPriority
- class CompactionPriorityJni {
- public:
- // Returns the equivalent org.rocksdb.CompactionPriority for the provided
- // C++ ROCKSDB_NAMESPACE::CompactionPri enum
- static jbyte toJavaCompactionPriority(
- const ROCKSDB_NAMESPACE::CompactionPri& compaction_priority) {
- switch(compaction_priority) {
- case ROCKSDB_NAMESPACE::CompactionPri::kByCompensatedSize:
- return 0x0;
- case ROCKSDB_NAMESPACE::CompactionPri::kOldestLargestSeqFirst:
- return 0x1;
- case ROCKSDB_NAMESPACE::CompactionPri::kOldestSmallestSeqFirst:
- return 0x2;
- case ROCKSDB_NAMESPACE::CompactionPri::kMinOverlappingRatio:
- return 0x3;
- default:
- return 0x0; // undefined
- }
- }
- // Returns the equivalent C++ ROCKSDB_NAMESPACE::CompactionPri enum for the
- // provided Java org.rocksdb.CompactionPriority
- static ROCKSDB_NAMESPACE::CompactionPri toCppCompactionPriority(
- jbyte jcompaction_priority) {
- switch(jcompaction_priority) {
- case 0x0:
- return ROCKSDB_NAMESPACE::CompactionPri::kByCompensatedSize;
- case 0x1:
- return ROCKSDB_NAMESPACE::CompactionPri::kOldestLargestSeqFirst;
- case 0x2:
- return ROCKSDB_NAMESPACE::CompactionPri::kOldestSmallestSeqFirst;
- case 0x3:
- return ROCKSDB_NAMESPACE::CompactionPri::kMinOverlappingRatio;
- default:
- // undefined/default
- return ROCKSDB_NAMESPACE::CompactionPri::kByCompensatedSize;
- }
- }
- };
- // The portal class for org.rocksdb.AccessHint
- class AccessHintJni {
- public:
- // Returns the equivalent org.rocksdb.AccessHint for the provided
- // C++ ROCKSDB_NAMESPACE::DBOptions::AccessHint enum
- static jbyte toJavaAccessHint(
- const ROCKSDB_NAMESPACE::DBOptions::AccessHint& access_hint) {
- switch(access_hint) {
- case ROCKSDB_NAMESPACE::DBOptions::AccessHint::NONE:
- return 0x0;
- case ROCKSDB_NAMESPACE::DBOptions::AccessHint::NORMAL:
- return 0x1;
- case ROCKSDB_NAMESPACE::DBOptions::AccessHint::SEQUENTIAL:
- return 0x2;
- case ROCKSDB_NAMESPACE::DBOptions::AccessHint::WILLNEED:
- return 0x3;
- default:
- // undefined/default
- return 0x1;
- }
- }
- // Returns the equivalent C++ ROCKSDB_NAMESPACE::DBOptions::AccessHint enum
- // for the provided Java org.rocksdb.AccessHint
- static ROCKSDB_NAMESPACE::DBOptions::AccessHint toCppAccessHint(
- jbyte jaccess_hint) {
- switch(jaccess_hint) {
- case 0x0:
- return ROCKSDB_NAMESPACE::DBOptions::AccessHint::NONE;
- case 0x1:
- return ROCKSDB_NAMESPACE::DBOptions::AccessHint::NORMAL;
- case 0x2:
- return ROCKSDB_NAMESPACE::DBOptions::AccessHint::SEQUENTIAL;
- case 0x3:
- return ROCKSDB_NAMESPACE::DBOptions::AccessHint::WILLNEED;
- default:
- // undefined/default
- return ROCKSDB_NAMESPACE::DBOptions::AccessHint::NORMAL;
- }
- }
- };
- // The portal class for org.rocksdb.WALRecoveryMode
- class WALRecoveryModeJni {
- public:
- // Returns the equivalent org.rocksdb.WALRecoveryMode for the provided
- // C++ ROCKSDB_NAMESPACE::WALRecoveryMode enum
- static jbyte toJavaWALRecoveryMode(
- const ROCKSDB_NAMESPACE::WALRecoveryMode& wal_recovery_mode) {
- switch(wal_recovery_mode) {
- case ROCKSDB_NAMESPACE::WALRecoveryMode::kTolerateCorruptedTailRecords:
- return 0x0;
- case ROCKSDB_NAMESPACE::WALRecoveryMode::kAbsoluteConsistency:
- return 0x1;
- case ROCKSDB_NAMESPACE::WALRecoveryMode::kPointInTimeRecovery:
- return 0x2;
- case ROCKSDB_NAMESPACE::WALRecoveryMode::kSkipAnyCorruptedRecords:
- return 0x3;
- default:
- // undefined/default
- return 0x2;
- }
- }
- // Returns the equivalent C++ ROCKSDB_NAMESPACE::WALRecoveryMode enum for the
- // provided Java org.rocksdb.WALRecoveryMode
- static ROCKSDB_NAMESPACE::WALRecoveryMode toCppWALRecoveryMode(
- jbyte jwal_recovery_mode) {
- switch(jwal_recovery_mode) {
- case 0x0:
- return ROCKSDB_NAMESPACE::WALRecoveryMode::
- kTolerateCorruptedTailRecords;
- case 0x1:
- return ROCKSDB_NAMESPACE::WALRecoveryMode::kAbsoluteConsistency;
- case 0x2:
- return ROCKSDB_NAMESPACE::WALRecoveryMode::kPointInTimeRecovery;
- case 0x3:
- return ROCKSDB_NAMESPACE::WALRecoveryMode::kSkipAnyCorruptedRecords;
- default:
- // undefined/default
- return ROCKSDB_NAMESPACE::WALRecoveryMode::kPointInTimeRecovery;
- }
- }
- };
- // The portal class for org.rocksdb.TickerType
- class TickerTypeJni {
- public:
- // Returns the equivalent org.rocksdb.TickerType for the provided
- // C++ ROCKSDB_NAMESPACE::Tickers enum
- static jbyte toJavaTickerType(const ROCKSDB_NAMESPACE::Tickers& tickers) {
- switch(tickers) {
- case ROCKSDB_NAMESPACE::Tickers::BLOCK_CACHE_MISS:
- return 0x0;
- case ROCKSDB_NAMESPACE::Tickers::BLOCK_CACHE_HIT:
- return 0x1;
- case ROCKSDB_NAMESPACE::Tickers::BLOCK_CACHE_ADD:
- return 0x2;
- case ROCKSDB_NAMESPACE::Tickers::BLOCK_CACHE_ADD_FAILURES:
- return 0x3;
- case ROCKSDB_NAMESPACE::Tickers::BLOCK_CACHE_INDEX_MISS:
- return 0x4;
- case ROCKSDB_NAMESPACE::Tickers::BLOCK_CACHE_INDEX_HIT:
- return 0x5;
- case ROCKSDB_NAMESPACE::Tickers::BLOCK_CACHE_INDEX_ADD:
- return 0x6;
- case ROCKSDB_NAMESPACE::Tickers::BLOCK_CACHE_INDEX_BYTES_INSERT:
- return 0x7;
- case ROCKSDB_NAMESPACE::Tickers::BLOCK_CACHE_INDEX_BYTES_EVICT:
- return 0x8;
- case ROCKSDB_NAMESPACE::Tickers::BLOCK_CACHE_FILTER_MISS:
- return 0x9;
- case ROCKSDB_NAMESPACE::Tickers::BLOCK_CACHE_FILTER_HIT:
- return 0xA;
- case ROCKSDB_NAMESPACE::Tickers::BLOCK_CACHE_FILTER_ADD:
- return 0xB;
- case ROCKSDB_NAMESPACE::Tickers::BLOCK_CACHE_FILTER_BYTES_INSERT:
- return 0xC;
- case ROCKSDB_NAMESPACE::Tickers::BLOCK_CACHE_FILTER_BYTES_EVICT:
- return 0xD;
- case ROCKSDB_NAMESPACE::Tickers::BLOCK_CACHE_DATA_MISS:
- return 0xE;
- case ROCKSDB_NAMESPACE::Tickers::BLOCK_CACHE_DATA_HIT:
- return 0xF;
- case ROCKSDB_NAMESPACE::Tickers::BLOCK_CACHE_DATA_ADD:
- return 0x10;
- case ROCKSDB_NAMESPACE::Tickers::BLOCK_CACHE_DATA_BYTES_INSERT:
- return 0x11;
- case ROCKSDB_NAMESPACE::Tickers::BLOCK_CACHE_BYTES_READ:
- return 0x12;
- case ROCKSDB_NAMESPACE::Tickers::BLOCK_CACHE_BYTES_WRITE:
- return 0x13;
- case ROCKSDB_NAMESPACE::Tickers::BLOOM_FILTER_USEFUL:
- return 0x14;
- case ROCKSDB_NAMESPACE::Tickers::PERSISTENT_CACHE_HIT:
- return 0x15;
- case ROCKSDB_NAMESPACE::Tickers::PERSISTENT_CACHE_MISS:
- return 0x16;
- case ROCKSDB_NAMESPACE::Tickers::SIM_BLOCK_CACHE_HIT:
- return 0x17;
- case ROCKSDB_NAMESPACE::Tickers::SIM_BLOCK_CACHE_MISS:
- return 0x18;
- case ROCKSDB_NAMESPACE::Tickers::MEMTABLE_HIT:
- return 0x19;
- case ROCKSDB_NAMESPACE::Tickers::MEMTABLE_MISS:
- return 0x1A;
- case ROCKSDB_NAMESPACE::Tickers::GET_HIT_L0:
- return 0x1B;
- case ROCKSDB_NAMESPACE::Tickers::GET_HIT_L1:
- return 0x1C;
- case ROCKSDB_NAMESPACE::Tickers::GET_HIT_L2_AND_UP:
- return 0x1D;
- case ROCKSDB_NAMESPACE::Tickers::COMPACTION_KEY_DROP_NEWER_ENTRY:
- return 0x1E;
- case ROCKSDB_NAMESPACE::Tickers::COMPACTION_KEY_DROP_OBSOLETE:
- return 0x1F;
- case ROCKSDB_NAMESPACE::Tickers::COMPACTION_KEY_DROP_RANGE_DEL:
- return 0x20;
- case ROCKSDB_NAMESPACE::Tickers::COMPACTION_KEY_DROP_USER:
- return 0x21;
- case ROCKSDB_NAMESPACE::Tickers::COMPACTION_RANGE_DEL_DROP_OBSOLETE:
- return 0x22;
- case ROCKSDB_NAMESPACE::Tickers::NUMBER_KEYS_WRITTEN:
- return 0x23;
- case ROCKSDB_NAMESPACE::Tickers::NUMBER_KEYS_READ:
- return 0x24;
- case ROCKSDB_NAMESPACE::Tickers::NUMBER_KEYS_UPDATED:
- return 0x25;
- case ROCKSDB_NAMESPACE::Tickers::BYTES_WRITTEN:
- return 0x26;
- case ROCKSDB_NAMESPACE::Tickers::BYTES_READ:
- return 0x27;
- case ROCKSDB_NAMESPACE::Tickers::NUMBER_DB_SEEK:
- return 0x28;
- case ROCKSDB_NAMESPACE::Tickers::NUMBER_DB_NEXT:
- return 0x29;
- case ROCKSDB_NAMESPACE::Tickers::NUMBER_DB_PREV:
- return 0x2A;
- case ROCKSDB_NAMESPACE::Tickers::NUMBER_DB_SEEK_FOUND:
- return 0x2B;
- case ROCKSDB_NAMESPACE::Tickers::NUMBER_DB_NEXT_FOUND:
- return 0x2C;
- case ROCKSDB_NAMESPACE::Tickers::NUMBER_DB_PREV_FOUND:
- return 0x2D;
- case ROCKSDB_NAMESPACE::Tickers::ITER_BYTES_READ:
- return 0x2E;
- case ROCKSDB_NAMESPACE::Tickers::NO_FILE_CLOSES:
- return 0x2F;
- case ROCKSDB_NAMESPACE::Tickers::NO_FILE_OPENS:
- return 0x30;
- case ROCKSDB_NAMESPACE::Tickers::NO_FILE_ERRORS:
- return 0x31;
- case ROCKSDB_NAMESPACE::Tickers::STALL_L0_SLOWDOWN_MICROS:
- return 0x32;
- case ROCKSDB_NAMESPACE::Tickers::STALL_MEMTABLE_COMPACTION_MICROS:
- return 0x33;
- case ROCKSDB_NAMESPACE::Tickers::STALL_L0_NUM_FILES_MICROS:
- return 0x34;
- case ROCKSDB_NAMESPACE::Tickers::STALL_MICROS:
- return 0x35;
- case ROCKSDB_NAMESPACE::Tickers::DB_MUTEX_WAIT_MICROS:
- return 0x36;
- case ROCKSDB_NAMESPACE::Tickers::RATE_LIMIT_DELAY_MILLIS:
- return 0x37;
- case ROCKSDB_NAMESPACE::Tickers::NO_ITERATORS:
- return 0x38;
- case ROCKSDB_NAMESPACE::Tickers::NUMBER_MULTIGET_CALLS:
- return 0x39;
- case ROCKSDB_NAMESPACE::Tickers::NUMBER_MULTIGET_KEYS_READ:
- return 0x3A;
- case ROCKSDB_NAMESPACE::Tickers::NUMBER_MULTIGET_BYTES_READ:
- return 0x3B;
- case ROCKSDB_NAMESPACE::Tickers::NUMBER_FILTERED_DELETES:
- return 0x3C;
- case ROCKSDB_NAMESPACE::Tickers::NUMBER_MERGE_FAILURES:
- return 0x3D;
- case ROCKSDB_NAMESPACE::Tickers::BLOOM_FILTER_PREFIX_CHECKED:
- return 0x3E;
- case ROCKSDB_NAMESPACE::Tickers::BLOOM_FILTER_PREFIX_USEFUL:
- return 0x3F;
- case ROCKSDB_NAMESPACE::Tickers::NUMBER_OF_RESEEKS_IN_ITERATION:
- return 0x40;
- case ROCKSDB_NAMESPACE::Tickers::GET_UPDATES_SINCE_CALLS:
- return 0x41;
- case ROCKSDB_NAMESPACE::Tickers::BLOCK_CACHE_COMPRESSED_MISS:
- return 0x42;
- case ROCKSDB_NAMESPACE::Tickers::BLOCK_CACHE_COMPRESSED_HIT:
- return 0x43;
- case ROCKSDB_NAMESPACE::Tickers::BLOCK_CACHE_COMPRESSED_ADD:
- return 0x44;
- case ROCKSDB_NAMESPACE::Tickers::BLOCK_CACHE_COMPRESSED_ADD_FAILURES:
- return 0x45;
- case ROCKSDB_NAMESPACE::Tickers::WAL_FILE_SYNCED:
- return 0x46;
- case ROCKSDB_NAMESPACE::Tickers::WAL_FILE_BYTES:
- return 0x47;
- case ROCKSDB_NAMESPACE::Tickers::WRITE_DONE_BY_SELF:
- return 0x48;
- case ROCKSDB_NAMESPACE::Tickers::WRITE_DONE_BY_OTHER:
- return 0x49;
- case ROCKSDB_NAMESPACE::Tickers::WRITE_TIMEDOUT:
- return 0x4A;
- case ROCKSDB_NAMESPACE::Tickers::WRITE_WITH_WAL:
- return 0x4B;
- case ROCKSDB_NAMESPACE::Tickers::COMPACT_READ_BYTES:
- return 0x4C;
- case ROCKSDB_NAMESPACE::Tickers::COMPACT_WRITE_BYTES:
- return 0x4D;
- case ROCKSDB_NAMESPACE::Tickers::FLUSH_WRITE_BYTES:
- return 0x4E;
- case ROCKSDB_NAMESPACE::Tickers::NUMBER_DIRECT_LOAD_TABLE_PROPERTIES:
- return 0x4F;
- case ROCKSDB_NAMESPACE::Tickers::NUMBER_SUPERVERSION_ACQUIRES:
- return 0x50;
- case ROCKSDB_NAMESPACE::Tickers::NUMBER_SUPERVERSION_RELEASES:
- return 0x51;
- case ROCKSDB_NAMESPACE::Tickers::NUMBER_SUPERVERSION_CLEANUPS:
- return 0x52;
- case ROCKSDB_NAMESPACE::Tickers::NUMBER_BLOCK_COMPRESSED:
- return 0x53;
- case ROCKSDB_NAMESPACE::Tickers::NUMBER_BLOCK_DECOMPRESSED:
- return 0x54;
- case ROCKSDB_NAMESPACE::Tickers::NUMBER_BLOCK_NOT_COMPRESSED:
- return 0x55;
- case ROCKSDB_NAMESPACE::Tickers::MERGE_OPERATION_TOTAL_TIME:
- return 0x56;
- case ROCKSDB_NAMESPACE::Tickers::FILTER_OPERATION_TOTAL_TIME:
- return 0x57;
- case ROCKSDB_NAMESPACE::Tickers::ROW_CACHE_HIT:
- return 0x58;
- case ROCKSDB_NAMESPACE::Tickers::ROW_CACHE_MISS:
- return 0x59;
- case ROCKSDB_NAMESPACE::Tickers::READ_AMP_ESTIMATE_USEFUL_BYTES:
- return 0x5A;
- case ROCKSDB_NAMESPACE::Tickers::READ_AMP_TOTAL_READ_BYTES:
- return 0x5B;
- case ROCKSDB_NAMESPACE::Tickers::NUMBER_RATE_LIMITER_DRAINS:
- return 0x5C;
- case ROCKSDB_NAMESPACE::Tickers::NUMBER_ITER_SKIP:
- return 0x5D;
- case ROCKSDB_NAMESPACE::Tickers::NUMBER_MULTIGET_KEYS_FOUND:
- return 0x5E;
- case ROCKSDB_NAMESPACE::Tickers::NO_ITERATOR_CREATED:
- // -0x01 to fixate the new value that incorrectly changed TICKER_ENUM_MAX.
- return -0x01;
- case ROCKSDB_NAMESPACE::Tickers::NO_ITERATOR_DELETED:
- return 0x60;
- case ROCKSDB_NAMESPACE::Tickers::COMPACTION_OPTIMIZED_DEL_DROP_OBSOLETE:
- return 0x61;
- case ROCKSDB_NAMESPACE::Tickers::COMPACTION_CANCELLED:
- return 0x62;
- case ROCKSDB_NAMESPACE::Tickers::BLOOM_FILTER_FULL_POSITIVE:
- return 0x63;
- case ROCKSDB_NAMESPACE::Tickers::BLOOM_FILTER_FULL_TRUE_POSITIVE:
- return 0x64;
- case ROCKSDB_NAMESPACE::Tickers::BLOB_DB_NUM_PUT:
- return 0x65;
- case ROCKSDB_NAMESPACE::Tickers::BLOB_DB_NUM_WRITE:
- return 0x66;
- case ROCKSDB_NAMESPACE::Tickers::BLOB_DB_NUM_GET:
- return 0x67;
- case ROCKSDB_NAMESPACE::Tickers::BLOB_DB_NUM_MULTIGET:
- return 0x68;
- case ROCKSDB_NAMESPACE::Tickers::BLOB_DB_NUM_SEEK:
- return 0x69;
- case ROCKSDB_NAMESPACE::Tickers::BLOB_DB_NUM_NEXT:
- return 0x6A;
- case ROCKSDB_NAMESPACE::Tickers::BLOB_DB_NUM_PREV:
- return 0x6B;
- case ROCKSDB_NAMESPACE::Tickers::BLOB_DB_NUM_KEYS_WRITTEN:
- return 0x6C;
- case ROCKSDB_NAMESPACE::Tickers::BLOB_DB_NUM_KEYS_READ:
- return 0x6D;
- case ROCKSDB_NAMESPACE::Tickers::BLOB_DB_BYTES_WRITTEN:
- return 0x6E;
- case ROCKSDB_NAMESPACE::Tickers::BLOB_DB_BYTES_READ:
- return 0x6F;
- case ROCKSDB_NAMESPACE::Tickers::BLOB_DB_WRITE_INLINED:
- return 0x70;
- case ROCKSDB_NAMESPACE::Tickers::BLOB_DB_WRITE_INLINED_TTL:
- return 0x71;
- case ROCKSDB_NAMESPACE::Tickers::BLOB_DB_WRITE_BLOB:
- return 0x72;
- case ROCKSDB_NAMESPACE::Tickers::BLOB_DB_WRITE_BLOB_TTL:
- return 0x73;
- case ROCKSDB_NAMESPACE::Tickers::BLOB_DB_BLOB_FILE_BYTES_WRITTEN:
- return 0x74;
- case ROCKSDB_NAMESPACE::Tickers::BLOB_DB_BLOB_FILE_BYTES_READ:
- return 0x75;
- case ROCKSDB_NAMESPACE::Tickers::BLOB_DB_BLOB_FILE_SYNCED:
- return 0x76;
- case ROCKSDB_NAMESPACE::Tickers::BLOB_DB_BLOB_INDEX_EXPIRED_COUNT:
- return 0x77;
- case ROCKSDB_NAMESPACE::Tickers::BLOB_DB_BLOB_INDEX_EXPIRED_SIZE:
- return 0x78;
- case ROCKSDB_NAMESPACE::Tickers::BLOB_DB_BLOB_INDEX_EVICTED_COUNT:
- return 0x79;
- case ROCKSDB_NAMESPACE::Tickers::BLOB_DB_BLOB_INDEX_EVICTED_SIZE:
- return 0x7A;
- case ROCKSDB_NAMESPACE::Tickers::BLOB_DB_GC_NUM_FILES:
- return 0x7B;
- case ROCKSDB_NAMESPACE::Tickers::BLOB_DB_GC_NUM_NEW_FILES:
- return 0x7C;
- case ROCKSDB_NAMESPACE::Tickers::BLOB_DB_GC_FAILURES:
- return 0x7D;
- case ROCKSDB_NAMESPACE::Tickers::BLOB_DB_GC_NUM_KEYS_OVERWRITTEN:
- return 0x7E;
- case ROCKSDB_NAMESPACE::Tickers::BLOB_DB_GC_NUM_KEYS_EXPIRED:
- return 0x7F;
- case ROCKSDB_NAMESPACE::Tickers::BLOB_DB_GC_NUM_KEYS_RELOCATED:
- return -0x02;
- case ROCKSDB_NAMESPACE::Tickers::BLOB_DB_GC_BYTES_OVERWRITTEN:
- return -0x03;
- case ROCKSDB_NAMESPACE::Tickers::BLOB_DB_GC_BYTES_EXPIRED:
- return -0x04;
- case ROCKSDB_NAMESPACE::Tickers::BLOB_DB_GC_BYTES_RELOCATED:
- return -0x05;
- case ROCKSDB_NAMESPACE::Tickers::BLOB_DB_FIFO_NUM_FILES_EVICTED:
- return -0x06;
- case ROCKSDB_NAMESPACE::Tickers::BLOB_DB_FIFO_NUM_KEYS_EVICTED:
- return -0x07;
- case ROCKSDB_NAMESPACE::Tickers::BLOB_DB_FIFO_BYTES_EVICTED:
- return -0x08;
- case ROCKSDB_NAMESPACE::Tickers::TXN_PREPARE_MUTEX_OVERHEAD:
- return -0x09;
- case ROCKSDB_NAMESPACE::Tickers::TXN_OLD_COMMIT_MAP_MUTEX_OVERHEAD:
- return -0x0A;
- case ROCKSDB_NAMESPACE::Tickers::TXN_DUPLICATE_KEY_OVERHEAD:
- return -0x0B;
- case ROCKSDB_NAMESPACE::Tickers::TXN_SNAPSHOT_MUTEX_OVERHEAD:
- return -0x0C;
- case ROCKSDB_NAMESPACE::Tickers::TXN_GET_TRY_AGAIN:
- return -0x0D;
- case ROCKSDB_NAMESPACE::Tickers::TICKER_ENUM_MAX:
- // 0x5F for backwards compatibility on current minor version.
- return 0x5F;
- default:
- // undefined/default
- return 0x0;
- }
- }
- // Returns the equivalent C++ ROCKSDB_NAMESPACE::Tickers enum for the
- // provided Java org.rocksdb.TickerType
- static ROCKSDB_NAMESPACE::Tickers toCppTickers(jbyte jticker_type) {
- switch(jticker_type) {
- case 0x0:
- return ROCKSDB_NAMESPACE::Tickers::BLOCK_CACHE_MISS;
- case 0x1:
- return ROCKSDB_NAMESPACE::Tickers::BLOCK_CACHE_HIT;
- case 0x2:
- return ROCKSDB_NAMESPACE::Tickers::BLOCK_CACHE_ADD;
- case 0x3:
- return ROCKSDB_NAMESPACE::Tickers::BLOCK_CACHE_ADD_FAILURES;
- case 0x4:
- return ROCKSDB_NAMESPACE::Tickers::BLOCK_CACHE_INDEX_MISS;
- case 0x5:
- return ROCKSDB_NAMESPACE::Tickers::BLOCK_CACHE_INDEX_HIT;
- case 0x6:
- return ROCKSDB_NAMESPACE::Tickers::BLOCK_CACHE_INDEX_ADD;
- case 0x7:
- return ROCKSDB_NAMESPACE::Tickers::BLOCK_CACHE_INDEX_BYTES_INSERT;
- case 0x8:
- return ROCKSDB_NAMESPACE::Tickers::BLOCK_CACHE_INDEX_BYTES_EVICT;
- case 0x9:
- return ROCKSDB_NAMESPACE::Tickers::BLOCK_CACHE_FILTER_MISS;
- case 0xA:
- return ROCKSDB_NAMESPACE::Tickers::BLOCK_CACHE_FILTER_HIT;
- case 0xB:
- return ROCKSDB_NAMESPACE::Tickers::BLOCK_CACHE_FILTER_ADD;
- case 0xC:
- return ROCKSDB_NAMESPACE::Tickers::BLOCK_CACHE_FILTER_BYTES_INSERT;
- case 0xD:
- return ROCKSDB_NAMESPACE::Tickers::BLOCK_CACHE_FILTER_BYTES_EVICT;
- case 0xE:
- return ROCKSDB_NAMESPACE::Tickers::BLOCK_CACHE_DATA_MISS;
- case 0xF:
- return ROCKSDB_NAMESPACE::Tickers::BLOCK_CACHE_DATA_HIT;
- case 0x10:
- return ROCKSDB_NAMESPACE::Tickers::BLOCK_CACHE_DATA_ADD;
- case 0x11:
- return ROCKSDB_NAMESPACE::Tickers::BLOCK_CACHE_DATA_BYTES_INSERT;
- case 0x12:
- return ROCKSDB_NAMESPACE::Tickers::BLOCK_CACHE_BYTES_READ;
- case 0x13:
- return ROCKSDB_NAMESPACE::Tickers::BLOCK_CACHE_BYTES_WRITE;
- case 0x14:
- return ROCKSDB_NAMESPACE::Tickers::BLOOM_FILTER_USEFUL;
- case 0x15:
- return ROCKSDB_NAMESPACE::Tickers::PERSISTENT_CACHE_HIT;
- case 0x16:
- return ROCKSDB_NAMESPACE::Tickers::PERSISTENT_CACHE_MISS;
- case 0x17:
- return ROCKSDB_NAMESPACE::Tickers::SIM_BLOCK_CACHE_HIT;
- case 0x18:
- return ROCKSDB_NAMESPACE::Tickers::SIM_BLOCK_CACHE_MISS;
- case 0x19:
- return ROCKSDB_NAMESPACE::Tickers::MEMTABLE_HIT;
- case 0x1A:
- return ROCKSDB_NAMESPACE::Tickers::MEMTABLE_MISS;
- case 0x1B:
- return ROCKSDB_NAMESPACE::Tickers::GET_HIT_L0;
- case 0x1C:
- return ROCKSDB_NAMESPACE::Tickers::GET_HIT_L1;
- case 0x1D:
- return ROCKSDB_NAMESPACE::Tickers::GET_HIT_L2_AND_UP;
- case 0x1E:
- return ROCKSDB_NAMESPACE::Tickers::COMPACTION_KEY_DROP_NEWER_ENTRY;
- case 0x1F:
- return ROCKSDB_NAMESPACE::Tickers::COMPACTION_KEY_DROP_OBSOLETE;
- case 0x20:
- return ROCKSDB_NAMESPACE::Tickers::COMPACTION_KEY_DROP_RANGE_DEL;
- case 0x21:
- return ROCKSDB_NAMESPACE::Tickers::COMPACTION_KEY_DROP_USER;
- case 0x22:
- return ROCKSDB_NAMESPACE::Tickers::COMPACTION_RANGE_DEL_DROP_OBSOLETE;
- case 0x23:
- return ROCKSDB_NAMESPACE::Tickers::NUMBER_KEYS_WRITTEN;
- case 0x24:
- return ROCKSDB_NAMESPACE::Tickers::NUMBER_KEYS_READ;
- case 0x25:
- return ROCKSDB_NAMESPACE::Tickers::NUMBER_KEYS_UPDATED;
- case 0x26:
- return ROCKSDB_NAMESPACE::Tickers::BYTES_WRITTEN;
- case 0x27:
- return ROCKSDB_NAMESPACE::Tickers::BYTES_READ;
- case 0x28:
- return ROCKSDB_NAMESPACE::Tickers::NUMBER_DB_SEEK;
- case 0x29:
- return ROCKSDB_NAMESPACE::Tickers::NUMBER_DB_NEXT;
- case 0x2A:
- return ROCKSDB_NAMESPACE::Tickers::NUMBER_DB_PREV;
- case 0x2B:
- return ROCKSDB_NAMESPACE::Tickers::NUMBER_DB_SEEK_FOUND;
- case 0x2C:
- return ROCKSDB_NAMESPACE::Tickers::NUMBER_DB_NEXT_FOUND;
- case 0x2D:
- return ROCKSDB_NAMESPACE::Tickers::NUMBER_DB_PREV_FOUND;
- case 0x2E:
- return ROCKSDB_NAMESPACE::Tickers::ITER_BYTES_READ;
- case 0x2F:
- return ROCKSDB_NAMESPACE::Tickers::NO_FILE_CLOSES;
- case 0x30:
- return ROCKSDB_NAMESPACE::Tickers::NO_FILE_OPENS;
- case 0x31:
- return ROCKSDB_NAMESPACE::Tickers::NO_FILE_ERRORS;
- case 0x32:
- return ROCKSDB_NAMESPACE::Tickers::STALL_L0_SLOWDOWN_MICROS;
- case 0x33:
- return ROCKSDB_NAMESPACE::Tickers::STALL_MEMTABLE_COMPACTION_MICROS;
- case 0x34:
- return ROCKSDB_NAMESPACE::Tickers::STALL_L0_NUM_FILES_MICROS;
- case 0x35:
- return ROCKSDB_NAMESPACE::Tickers::STALL_MICROS;
- case 0x36:
- return ROCKSDB_NAMESPACE::Tickers::DB_MUTEX_WAIT_MICROS;
- case 0x37:
- return ROCKSDB_NAMESPACE::Tickers::RATE_LIMIT_DELAY_MILLIS;
- case 0x38:
- return ROCKSDB_NAMESPACE::Tickers::NO_ITERATORS;
- case 0x39:
- return ROCKSDB_NAMESPACE::Tickers::NUMBER_MULTIGET_CALLS;
- case 0x3A:
- return ROCKSDB_NAMESPACE::Tickers::NUMBER_MULTIGET_KEYS_READ;
- case 0x3B:
- return ROCKSDB_NAMESPACE::Tickers::NUMBER_MULTIGET_BYTES_READ;
- case 0x3C:
- return ROCKSDB_NAMESPACE::Tickers::NUMBER_FILTERED_DELETES;
- case 0x3D:
- return ROCKSDB_NAMESPACE::Tickers::NUMBER_MERGE_FAILURES;
- case 0x3E:
- return ROCKSDB_NAMESPACE::Tickers::BLOOM_FILTER_PREFIX_CHECKED;
- case 0x3F:
- return ROCKSDB_NAMESPACE::Tickers::BLOOM_FILTER_PREFIX_USEFUL;
- case 0x40:
- return ROCKSDB_NAMESPACE::Tickers::NUMBER_OF_RESEEKS_IN_ITERATION;
- case 0x41:
- return ROCKSDB_NAMESPACE::Tickers::GET_UPDATES_SINCE_CALLS;
- case 0x42:
- return ROCKSDB_NAMESPACE::Tickers::BLOCK_CACHE_COMPRESSED_MISS;
- case 0x43:
- return ROCKSDB_NAMESPACE::Tickers::BLOCK_CACHE_COMPRESSED_HIT;
- case 0x44:
- return ROCKSDB_NAMESPACE::Tickers::BLOCK_CACHE_COMPRESSED_ADD;
- case 0x45:
- return ROCKSDB_NAMESPACE::Tickers::BLOCK_CACHE_COMPRESSED_ADD_FAILURES;
- case 0x46:
- return ROCKSDB_NAMESPACE::Tickers::WAL_FILE_SYNCED;
- case 0x47:
- return ROCKSDB_NAMESPACE::Tickers::WAL_FILE_BYTES;
- case 0x48:
- return ROCKSDB_NAMESPACE::Tickers::WRITE_DONE_BY_SELF;
- case 0x49:
- return ROCKSDB_NAMESPACE::Tickers::WRITE_DONE_BY_OTHER;
- case 0x4A:
- return ROCKSDB_NAMESPACE::Tickers::WRITE_TIMEDOUT;
- case 0x4B:
- return ROCKSDB_NAMESPACE::Tickers::WRITE_WITH_WAL;
- case 0x4C:
- return ROCKSDB_NAMESPACE::Tickers::COMPACT_READ_BYTES;
- case 0x4D:
- return ROCKSDB_NAMESPACE::Tickers::COMPACT_WRITE_BYTES;
- case 0x4E:
- return ROCKSDB_NAMESPACE::Tickers::FLUSH_WRITE_BYTES;
- case 0x4F:
- return ROCKSDB_NAMESPACE::Tickers::NUMBER_DIRECT_LOAD_TABLE_PROPERTIES;
- case 0x50:
- return ROCKSDB_NAMESPACE::Tickers::NUMBER_SUPERVERSION_ACQUIRES;
- case 0x51:
- return ROCKSDB_NAMESPACE::Tickers::NUMBER_SUPERVERSION_RELEASES;
- case 0x52:
- return ROCKSDB_NAMESPACE::Tickers::NUMBER_SUPERVERSION_CLEANUPS;
- case 0x53:
- return ROCKSDB_NAMESPACE::Tickers::NUMBER_BLOCK_COMPRESSED;
- case 0x54:
- return ROCKSDB_NAMESPACE::Tickers::NUMBER_BLOCK_DECOMPRESSED;
- case 0x55:
- return ROCKSDB_NAMESPACE::Tickers::NUMBER_BLOCK_NOT_COMPRESSED;
- case 0x56:
- return ROCKSDB_NAMESPACE::Tickers::MERGE_OPERATION_TOTAL_TIME;
- case 0x57:
- return ROCKSDB_NAMESPACE::Tickers::FILTER_OPERATION_TOTAL_TIME;
- case 0x58:
- return ROCKSDB_NAMESPACE::Tickers::ROW_CACHE_HIT;
- case 0x59:
- return ROCKSDB_NAMESPACE::Tickers::ROW_CACHE_MISS;
- case 0x5A:
- return ROCKSDB_NAMESPACE::Tickers::READ_AMP_ESTIMATE_USEFUL_BYTES;
- case 0x5B:
- return ROCKSDB_NAMESPACE::Tickers::READ_AMP_TOTAL_READ_BYTES;
- case 0x5C:
- return ROCKSDB_NAMESPACE::Tickers::NUMBER_RATE_LIMITER_DRAINS;
- case 0x5D:
- return ROCKSDB_NAMESPACE::Tickers::NUMBER_ITER_SKIP;
- case 0x5E:
- return ROCKSDB_NAMESPACE::Tickers::NUMBER_MULTIGET_KEYS_FOUND;
- case -0x01:
- // -0x01 to fixate the new value that incorrectly changed TICKER_ENUM_MAX.
- return ROCKSDB_NAMESPACE::Tickers::NO_ITERATOR_CREATED;
- case 0x60:
- return ROCKSDB_NAMESPACE::Tickers::NO_ITERATOR_DELETED;
- case 0x61:
- return ROCKSDB_NAMESPACE::Tickers::
- COMPACTION_OPTIMIZED_DEL_DROP_OBSOLETE;
- case 0x62:
- return ROCKSDB_NAMESPACE::Tickers::COMPACTION_CANCELLED;
- case 0x63:
- return ROCKSDB_NAMESPACE::Tickers::BLOOM_FILTER_FULL_POSITIVE;
- case 0x64:
- return ROCKSDB_NAMESPACE::Tickers::BLOOM_FILTER_FULL_TRUE_POSITIVE;
- case 0x65:
- return ROCKSDB_NAMESPACE::Tickers::BLOB_DB_NUM_PUT;
- case 0x66:
- return ROCKSDB_NAMESPACE::Tickers::BLOB_DB_NUM_WRITE;
- case 0x67:
- return ROCKSDB_NAMESPACE::Tickers::BLOB_DB_NUM_GET;
- case 0x68:
- return ROCKSDB_NAMESPACE::Tickers::BLOB_DB_NUM_MULTIGET;
- case 0x69:
- return ROCKSDB_NAMESPACE::Tickers::BLOB_DB_NUM_SEEK;
- case 0x6A:
- return ROCKSDB_NAMESPACE::Tickers::BLOB_DB_NUM_NEXT;
- case 0x6B:
- return ROCKSDB_NAMESPACE::Tickers::BLOB_DB_NUM_PREV;
- case 0x6C:
- return ROCKSDB_NAMESPACE::Tickers::BLOB_DB_NUM_KEYS_WRITTEN;
- case 0x6D:
- return ROCKSDB_NAMESPACE::Tickers::BLOB_DB_NUM_KEYS_READ;
- case 0x6E:
- return ROCKSDB_NAMESPACE::Tickers::BLOB_DB_BYTES_WRITTEN;
- case 0x6F:
- return ROCKSDB_NAMESPACE::Tickers::BLOB_DB_BYTES_READ;
- case 0x70:
- return ROCKSDB_NAMESPACE::Tickers::BLOB_DB_WRITE_INLINED;
- case 0x71:
- return ROCKSDB_NAMESPACE::Tickers::BLOB_DB_WRITE_INLINED_TTL;
- case 0x72:
- return ROCKSDB_NAMESPACE::Tickers::BLOB_DB_WRITE_BLOB;
- case 0x73:
- return ROCKSDB_NAMESPACE::Tickers::BLOB_DB_WRITE_BLOB_TTL;
- case 0x74:
- return ROCKSDB_NAMESPACE::Tickers::BLOB_DB_BLOB_FILE_BYTES_WRITTEN;
- case 0x75:
- return ROCKSDB_NAMESPACE::Tickers::BLOB_DB_BLOB_FILE_BYTES_READ;
- case 0x76:
- return ROCKSDB_NAMESPACE::Tickers::BLOB_DB_BLOB_FILE_SYNCED;
- case 0x77:
- return ROCKSDB_NAMESPACE::Tickers::BLOB_DB_BLOB_INDEX_EXPIRED_COUNT;
- case 0x78:
- return ROCKSDB_NAMESPACE::Tickers::BLOB_DB_BLOB_INDEX_EXPIRED_SIZE;
- case 0x79:
- return ROCKSDB_NAMESPACE::Tickers::BLOB_DB_BLOB_INDEX_EVICTED_COUNT;
- case 0x7A:
- return ROCKSDB_NAMESPACE::Tickers::BLOB_DB_BLOB_INDEX_EVICTED_SIZE;
- case 0x7B:
- return ROCKSDB_NAMESPACE::Tickers::BLOB_DB_GC_NUM_FILES;
- case 0x7C:
- return ROCKSDB_NAMESPACE::Tickers::BLOB_DB_GC_NUM_NEW_FILES;
- case 0x7D:
- return ROCKSDB_NAMESPACE::Tickers::BLOB_DB_GC_FAILURES;
- case 0x7E:
- return ROCKSDB_NAMESPACE::Tickers::BLOB_DB_GC_NUM_KEYS_OVERWRITTEN;
- case 0x7F:
- return ROCKSDB_NAMESPACE::Tickers::BLOB_DB_GC_NUM_KEYS_EXPIRED;
- case -0x02:
- return ROCKSDB_NAMESPACE::Tickers::BLOB_DB_GC_NUM_KEYS_RELOCATED;
- case -0x03:
- return ROCKSDB_NAMESPACE::Tickers::BLOB_DB_GC_BYTES_OVERWRITTEN;
- case -0x04:
- return ROCKSDB_NAMESPACE::Tickers::BLOB_DB_GC_BYTES_EXPIRED;
- case -0x05:
- return ROCKSDB_NAMESPACE::Tickers::BLOB_DB_GC_BYTES_RELOCATED;
- case -0x06:
- return ROCKSDB_NAMESPACE::Tickers::BLOB_DB_FIFO_NUM_FILES_EVICTED;
- case -0x07:
- return ROCKSDB_NAMESPACE::Tickers::BLOB_DB_FIFO_NUM_KEYS_EVICTED;
- case -0x08:
- return ROCKSDB_NAMESPACE::Tickers::BLOB_DB_FIFO_BYTES_EVICTED;
- case -0x09:
- return ROCKSDB_NAMESPACE::Tickers::TXN_PREPARE_MUTEX_OVERHEAD;
- case -0x0A:
- return ROCKSDB_NAMESPACE::Tickers::TXN_OLD_COMMIT_MAP_MUTEX_OVERHEAD;
- case -0x0B:
- return ROCKSDB_NAMESPACE::Tickers::TXN_DUPLICATE_KEY_OVERHEAD;
- case -0x0C:
- return ROCKSDB_NAMESPACE::Tickers::TXN_SNAPSHOT_MUTEX_OVERHEAD;
- case -0x0D:
- return ROCKSDB_NAMESPACE::Tickers::TXN_GET_TRY_AGAIN;
- case 0x5F:
- // 0x5F for backwards compatibility on current minor version.
- return ROCKSDB_NAMESPACE::Tickers::TICKER_ENUM_MAX;
- default:
- // undefined/default
- return ROCKSDB_NAMESPACE::Tickers::BLOCK_CACHE_MISS;
- }
- }
- };
- // The portal class for org.rocksdb.HistogramType
- class HistogramTypeJni {
- public:
- // Returns the equivalent org.rocksdb.HistogramType for the provided
- // C++ ROCKSDB_NAMESPACE::Histograms enum
- static jbyte toJavaHistogramsType(
- const ROCKSDB_NAMESPACE::Histograms& histograms) {
- switch(histograms) {
- case ROCKSDB_NAMESPACE::Histograms::DB_GET:
- return 0x0;
- case ROCKSDB_NAMESPACE::Histograms::DB_WRITE:
- return 0x1;
- case ROCKSDB_NAMESPACE::Histograms::COMPACTION_TIME:
- return 0x2;
- case ROCKSDB_NAMESPACE::Histograms::SUBCOMPACTION_SETUP_TIME:
- return 0x3;
- case ROCKSDB_NAMESPACE::Histograms::TABLE_SYNC_MICROS:
- return 0x4;
- case ROCKSDB_NAMESPACE::Histograms::COMPACTION_OUTFILE_SYNC_MICROS:
- return 0x5;
- case ROCKSDB_NAMESPACE::Histograms::WAL_FILE_SYNC_MICROS:
- return 0x6;
- case ROCKSDB_NAMESPACE::Histograms::MANIFEST_FILE_SYNC_MICROS:
- return 0x7;
- case ROCKSDB_NAMESPACE::Histograms::TABLE_OPEN_IO_MICROS:
- return 0x8;
- case ROCKSDB_NAMESPACE::Histograms::DB_MULTIGET:
- return 0x9;
- case ROCKSDB_NAMESPACE::Histograms::READ_BLOCK_COMPACTION_MICROS:
- return 0xA;
- case ROCKSDB_NAMESPACE::Histograms::READ_BLOCK_GET_MICROS:
- return 0xB;
- case ROCKSDB_NAMESPACE::Histograms::WRITE_RAW_BLOCK_MICROS:
- return 0xC;
- case ROCKSDB_NAMESPACE::Histograms::STALL_L0_SLOWDOWN_COUNT:
- return 0xD;
- case ROCKSDB_NAMESPACE::Histograms::STALL_MEMTABLE_COMPACTION_COUNT:
- return 0xE;
- case ROCKSDB_NAMESPACE::Histograms::STALL_L0_NUM_FILES_COUNT:
- return 0xF;
- case ROCKSDB_NAMESPACE::Histograms::HARD_RATE_LIMIT_DELAY_COUNT:
- return 0x10;
- case ROCKSDB_NAMESPACE::Histograms::SOFT_RATE_LIMIT_DELAY_COUNT:
- return 0x11;
- case ROCKSDB_NAMESPACE::Histograms::NUM_FILES_IN_SINGLE_COMPACTION:
- return 0x12;
- case ROCKSDB_NAMESPACE::Histograms::DB_SEEK:
- return 0x13;
- case ROCKSDB_NAMESPACE::Histograms::WRITE_STALL:
- return 0x14;
- case ROCKSDB_NAMESPACE::Histograms::SST_READ_MICROS:
- return 0x15;
- case ROCKSDB_NAMESPACE::Histograms::NUM_SUBCOMPACTIONS_SCHEDULED:
- return 0x16;
- case ROCKSDB_NAMESPACE::Histograms::BYTES_PER_READ:
- return 0x17;
- case ROCKSDB_NAMESPACE::Histograms::BYTES_PER_WRITE:
- return 0x18;
- case ROCKSDB_NAMESPACE::Histograms::BYTES_PER_MULTIGET:
- return 0x19;
- case ROCKSDB_NAMESPACE::Histograms::BYTES_COMPRESSED:
- return 0x1A;
- case ROCKSDB_NAMESPACE::Histograms::BYTES_DECOMPRESSED:
- return 0x1B;
- case ROCKSDB_NAMESPACE::Histograms::COMPRESSION_TIMES_NANOS:
- return 0x1C;
- case ROCKSDB_NAMESPACE::Histograms::DECOMPRESSION_TIMES_NANOS:
- return 0x1D;
- case ROCKSDB_NAMESPACE::Histograms::READ_NUM_MERGE_OPERANDS:
- return 0x1E;
- // 0x20 to skip 0x1F so TICKER_ENUM_MAX remains unchanged for minor version compatibility.
- case ROCKSDB_NAMESPACE::Histograms::FLUSH_TIME:
- return 0x20;
- case ROCKSDB_NAMESPACE::Histograms::BLOB_DB_KEY_SIZE:
- return 0x21;
- case ROCKSDB_NAMESPACE::Histograms::BLOB_DB_VALUE_SIZE:
- return 0x22;
- case ROCKSDB_NAMESPACE::Histograms::BLOB_DB_WRITE_MICROS:
- return 0x23;
- case ROCKSDB_NAMESPACE::Histograms::BLOB_DB_GET_MICROS:
- return 0x24;
- case ROCKSDB_NAMESPACE::Histograms::BLOB_DB_MULTIGET_MICROS:
- return 0x25;
- case ROCKSDB_NAMESPACE::Histograms::BLOB_DB_SEEK_MICROS:
- return 0x26;
- case ROCKSDB_NAMESPACE::Histograms::BLOB_DB_NEXT_MICROS:
- return 0x27;
- case ROCKSDB_NAMESPACE::Histograms::BLOB_DB_PREV_MICROS:
- return 0x28;
- case ROCKSDB_NAMESPACE::Histograms::BLOB_DB_BLOB_FILE_WRITE_MICROS:
- return 0x29;
- case ROCKSDB_NAMESPACE::Histograms::BLOB_DB_BLOB_FILE_READ_MICROS:
- return 0x2A;
- case ROCKSDB_NAMESPACE::Histograms::BLOB_DB_BLOB_FILE_SYNC_MICROS:
- return 0x2B;
- case ROCKSDB_NAMESPACE::Histograms::BLOB_DB_GC_MICROS:
- return 0x2C;
- case ROCKSDB_NAMESPACE::Histograms::BLOB_DB_COMPRESSION_MICROS:
- return 0x2D;
- case ROCKSDB_NAMESPACE::Histograms::BLOB_DB_DECOMPRESSION_MICROS:
- return 0x2E;
- case ROCKSDB_NAMESPACE::Histograms::HISTOGRAM_ENUM_MAX:
- // 0x1F for backwards compatibility on current minor version.
- return 0x1F;
- default:
- // undefined/default
- return 0x0;
- }
- }
- // Returns the equivalent C++ ROCKSDB_NAMESPACE::Histograms enum for the
- // provided Java org.rocksdb.HistogramsType
- static ROCKSDB_NAMESPACE::Histograms toCppHistograms(jbyte jhistograms_type) {
- switch(jhistograms_type) {
- case 0x0:
- return ROCKSDB_NAMESPACE::Histograms::DB_GET;
- case 0x1:
- return ROCKSDB_NAMESPACE::Histograms::DB_WRITE;
- case 0x2:
- return ROCKSDB_NAMESPACE::Histograms::COMPACTION_TIME;
- case 0x3:
- return ROCKSDB_NAMESPACE::Histograms::SUBCOMPACTION_SETUP_TIME;
- case 0x4:
- return ROCKSDB_NAMESPACE::Histograms::TABLE_SYNC_MICROS;
- case 0x5:
- return ROCKSDB_NAMESPACE::Histograms::COMPACTION_OUTFILE_SYNC_MICROS;
- case 0x6:
- return ROCKSDB_NAMESPACE::Histograms::WAL_FILE_SYNC_MICROS;
- case 0x7:
- return ROCKSDB_NAMESPACE::Histograms::MANIFEST_FILE_SYNC_MICROS;
- case 0x8:
- return ROCKSDB_NAMESPACE::Histograms::TABLE_OPEN_IO_MICROS;
- case 0x9:
- return ROCKSDB_NAMESPACE::Histograms::DB_MULTIGET;
- case 0xA:
- return ROCKSDB_NAMESPACE::Histograms::READ_BLOCK_COMPACTION_MICROS;
- case 0xB:
- return ROCKSDB_NAMESPACE::Histograms::READ_BLOCK_GET_MICROS;
- case 0xC:
- return ROCKSDB_NAMESPACE::Histograms::WRITE_RAW_BLOCK_MICROS;
- case 0xD:
- return ROCKSDB_NAMESPACE::Histograms::STALL_L0_SLOWDOWN_COUNT;
- case 0xE:
- return ROCKSDB_NAMESPACE::Histograms::STALL_MEMTABLE_COMPACTION_COUNT;
- case 0xF:
- return ROCKSDB_NAMESPACE::Histograms::STALL_L0_NUM_FILES_COUNT;
- case 0x10:
- return ROCKSDB_NAMESPACE::Histograms::HARD_RATE_LIMIT_DELAY_COUNT;
- case 0x11:
- return ROCKSDB_NAMESPACE::Histograms::SOFT_RATE_LIMIT_DELAY_COUNT;
- case 0x12:
- return ROCKSDB_NAMESPACE::Histograms::NUM_FILES_IN_SINGLE_COMPACTION;
- case 0x13:
- return ROCKSDB_NAMESPACE::Histograms::DB_SEEK;
- case 0x14:
- return ROCKSDB_NAMESPACE::Histograms::WRITE_STALL;
- case 0x15:
- return ROCKSDB_NAMESPACE::Histograms::SST_READ_MICROS;
- case 0x16:
- return ROCKSDB_NAMESPACE::Histograms::NUM_SUBCOMPACTIONS_SCHEDULED;
- case 0x17:
- return ROCKSDB_NAMESPACE::Histograms::BYTES_PER_READ;
- case 0x18:
- return ROCKSDB_NAMESPACE::Histograms::BYTES_PER_WRITE;
- case 0x19:
- return ROCKSDB_NAMESPACE::Histograms::BYTES_PER_MULTIGET;
- case 0x1A:
- return ROCKSDB_NAMESPACE::Histograms::BYTES_COMPRESSED;
- case 0x1B:
- return ROCKSDB_NAMESPACE::Histograms::BYTES_DECOMPRESSED;
- case 0x1C:
- return ROCKSDB_NAMESPACE::Histograms::COMPRESSION_TIMES_NANOS;
- case 0x1D:
- return ROCKSDB_NAMESPACE::Histograms::DECOMPRESSION_TIMES_NANOS;
- case 0x1E:
- return ROCKSDB_NAMESPACE::Histograms::READ_NUM_MERGE_OPERANDS;
- // 0x20 to skip 0x1F so TICKER_ENUM_MAX remains unchanged for minor version compatibility.
- case 0x20:
- return ROCKSDB_NAMESPACE::Histograms::FLUSH_TIME;
- case 0x21:
- return ROCKSDB_NAMESPACE::Histograms::BLOB_DB_KEY_SIZE;
- case 0x22:
- return ROCKSDB_NAMESPACE::Histograms::BLOB_DB_VALUE_SIZE;
- case 0x23:
- return ROCKSDB_NAMESPACE::Histograms::BLOB_DB_WRITE_MICROS;
- case 0x24:
- return ROCKSDB_NAMESPACE::Histograms::BLOB_DB_GET_MICROS;
- case 0x25:
- return ROCKSDB_NAMESPACE::Histograms::BLOB_DB_MULTIGET_MICROS;
- case 0x26:
- return ROCKSDB_NAMESPACE::Histograms::BLOB_DB_SEEK_MICROS;
- case 0x27:
- return ROCKSDB_NAMESPACE::Histograms::BLOB_DB_NEXT_MICROS;
- case 0x28:
- return ROCKSDB_NAMESPACE::Histograms::BLOB_DB_PREV_MICROS;
- case 0x29:
- return ROCKSDB_NAMESPACE::Histograms::BLOB_DB_BLOB_FILE_WRITE_MICROS;
- case 0x2A:
- return ROCKSDB_NAMESPACE::Histograms::BLOB_DB_BLOB_FILE_READ_MICROS;
- case 0x2B:
- return ROCKSDB_NAMESPACE::Histograms::BLOB_DB_BLOB_FILE_SYNC_MICROS;
- case 0x2C:
- return ROCKSDB_NAMESPACE::Histograms::BLOB_DB_GC_MICROS;
- case 0x2D:
- return ROCKSDB_NAMESPACE::Histograms::BLOB_DB_COMPRESSION_MICROS;
- case 0x2E:
- return ROCKSDB_NAMESPACE::Histograms::BLOB_DB_DECOMPRESSION_MICROS;
- case 0x1F:
- // 0x1F for backwards compatibility on current minor version.
- return ROCKSDB_NAMESPACE::Histograms::HISTOGRAM_ENUM_MAX;
- default:
- // undefined/default
- return ROCKSDB_NAMESPACE::Histograms::DB_GET;
- }
- }
- };
- // The portal class for org.rocksdb.StatsLevel
- class StatsLevelJni {
- public:
- // Returns the equivalent org.rocksdb.StatsLevel for the provided
- // C++ ROCKSDB_NAMESPACE::StatsLevel enum
- static jbyte toJavaStatsLevel(
- const ROCKSDB_NAMESPACE::StatsLevel& stats_level) {
- switch(stats_level) {
- case ROCKSDB_NAMESPACE::StatsLevel::kExceptDetailedTimers:
- return 0x0;
- case ROCKSDB_NAMESPACE::StatsLevel::kExceptTimeForMutex:
- return 0x1;
- case ROCKSDB_NAMESPACE::StatsLevel::kAll:
- return 0x2;
- default:
- // undefined/default
- return 0x0;
- }
- }
- // Returns the equivalent C++ ROCKSDB_NAMESPACE::StatsLevel enum for the
- // provided Java org.rocksdb.StatsLevel
- static ROCKSDB_NAMESPACE::StatsLevel toCppStatsLevel(jbyte jstats_level) {
- switch(jstats_level) {
- case 0x0:
- return ROCKSDB_NAMESPACE::StatsLevel::kExceptDetailedTimers;
- case 0x1:
- return ROCKSDB_NAMESPACE::StatsLevel::kExceptTimeForMutex;
- case 0x2:
- return ROCKSDB_NAMESPACE::StatsLevel::kAll;
- default:
- // undefined/default
- return ROCKSDB_NAMESPACE::StatsLevel::kExceptDetailedTimers;
- }
- }
- };
- // The portal class for org.rocksdb.RateLimiterMode
- class RateLimiterModeJni {
- public:
- // Returns the equivalent org.rocksdb.RateLimiterMode for the provided
- // C++ ROCKSDB_NAMESPACE::RateLimiter::Mode enum
- static jbyte toJavaRateLimiterMode(
- const ROCKSDB_NAMESPACE::RateLimiter::Mode& rate_limiter_mode) {
- switch(rate_limiter_mode) {
- case ROCKSDB_NAMESPACE::RateLimiter::Mode::kReadsOnly:
- return 0x0;
- case ROCKSDB_NAMESPACE::RateLimiter::Mode::kWritesOnly:
- return 0x1;
- case ROCKSDB_NAMESPACE::RateLimiter::Mode::kAllIo:
- return 0x2;
- default:
- // undefined/default
- return 0x1;
- }
- }
- // Returns the equivalent C++ ROCKSDB_NAMESPACE::RateLimiter::Mode enum for
- // the provided Java org.rocksdb.RateLimiterMode
- static ROCKSDB_NAMESPACE::RateLimiter::Mode toCppRateLimiterMode(
- jbyte jrate_limiter_mode) {
- switch(jrate_limiter_mode) {
- case 0x0:
- return ROCKSDB_NAMESPACE::RateLimiter::Mode::kReadsOnly;
- case 0x1:
- return ROCKSDB_NAMESPACE::RateLimiter::Mode::kWritesOnly;
- case 0x2:
- return ROCKSDB_NAMESPACE::RateLimiter::Mode::kAllIo;
- default:
- // undefined/default
- return ROCKSDB_NAMESPACE::RateLimiter::Mode::kWritesOnly;
- }
- }
- };
- // The portal class for org.rocksdb.MemoryUsageType
- class MemoryUsageTypeJni {
- public:
- // Returns the equivalent org.rocksdb.MemoryUsageType for the provided
- // C++ ROCKSDB_NAMESPACE::MemoryUtil::UsageType enum
- static jbyte toJavaMemoryUsageType(
- const ROCKSDB_NAMESPACE::MemoryUtil::UsageType& usage_type) {
- switch (usage_type) {
- case ROCKSDB_NAMESPACE::MemoryUtil::UsageType::kMemTableTotal:
- return 0x0;
- case ROCKSDB_NAMESPACE::MemoryUtil::UsageType::kMemTableUnFlushed:
- return 0x1;
- case ROCKSDB_NAMESPACE::MemoryUtil::UsageType::kTableReadersTotal:
- return 0x2;
- case ROCKSDB_NAMESPACE::MemoryUtil::UsageType::kCacheTotal:
- return 0x3;
- default:
- // undefined: use kNumUsageTypes
- return 0x4;
- }
- }
- // Returns the equivalent C++ ROCKSDB_NAMESPACE::MemoryUtil::UsageType enum for
- // the provided Java org.rocksdb.MemoryUsageType
- static ROCKSDB_NAMESPACE::MemoryUtil::UsageType toCppMemoryUsageType(
- jbyte usage_type) {
- switch (usage_type) {
- case 0x0:
- return ROCKSDB_NAMESPACE::MemoryUtil::UsageType::kMemTableTotal;
- case 0x1:
- return ROCKSDB_NAMESPACE::MemoryUtil::UsageType::kMemTableUnFlushed;
- case 0x2:
- return ROCKSDB_NAMESPACE::MemoryUtil::UsageType::kTableReadersTotal;
- case 0x3:
- return ROCKSDB_NAMESPACE::MemoryUtil::UsageType::kCacheTotal;
- default:
- // undefined/default: use kNumUsageTypes
- return ROCKSDB_NAMESPACE::MemoryUtil::UsageType::kNumUsageTypes;
- }
- }
- };
- // The portal class for org.rocksdb.Transaction
- class TransactionJni : public JavaClass {
- public:
- /**
- * Get the Java Class org.rocksdb.Transaction
- *
- * @param env A pointer to the Java environment
- *
- * @return The Java Class or nullptr if one of the
- * ClassFormatError, ClassCircularityError, NoClassDefFoundError,
- * OutOfMemoryError or ExceptionInInitializerError exceptions is thrown
- */
- static jclass getJClass(JNIEnv* env) {
- return JavaClass::getJClass(env,
- "org/rocksdb/Transaction");
- }
- /**
- * Create a new Java org.rocksdb.Transaction.WaitingTransactions object
- *
- * @param env A pointer to the Java environment
- * @param jtransaction A Java org.rocksdb.Transaction object
- * @param column_family_id The id of the column family
- * @param key The key
- * @param transaction_ids The transaction ids
- *
- * @return A reference to a Java
- * org.rocksdb.Transaction.WaitingTransactions object,
- * or nullptr if an an exception occurs
- */
- static jobject newWaitingTransactions(JNIEnv* env, jobject jtransaction,
- const uint32_t column_family_id, const std::string &key,
- const std::vector<TransactionID> &transaction_ids) {
- jclass jclazz = getJClass(env);
- if(jclazz == nullptr) {
- // exception occurred accessing class
- return nullptr;
- }
- jmethodID mid = env->GetMethodID(
- jclazz, "newWaitingTransactions", "(JLjava/lang/String;[J)Lorg/rocksdb/Transaction$WaitingTransactions;");
- if(mid == nullptr) {
- // exception thrown: NoSuchMethodException or OutOfMemoryError
- return nullptr;
- }
- jstring jkey = env->NewStringUTF(key.c_str());
- if(jkey == nullptr) {
- // exception thrown: OutOfMemoryError
- return nullptr;
- }
- const size_t len = transaction_ids.size();
- jlongArray jtransaction_ids = env->NewLongArray(static_cast<jsize>(len));
- if(jtransaction_ids == nullptr) {
- // exception thrown: OutOfMemoryError
- env->DeleteLocalRef(jkey);
- return nullptr;
- }
- jlong *body = env->GetLongArrayElements(jtransaction_ids, nullptr);
- if(body == nullptr) {
- // exception thrown: OutOfMemoryError
- env->DeleteLocalRef(jkey);
- env->DeleteLocalRef(jtransaction_ids);
- return nullptr;
- }
- for(size_t i = 0; i < len; ++i) {
- body[i] = static_cast<jlong>(transaction_ids[i]);
- }
- env->ReleaseLongArrayElements(jtransaction_ids, body, 0);
- jobject jwaiting_transactions = env->CallObjectMethod(jtransaction,
- mid, static_cast<jlong>(column_family_id), jkey, jtransaction_ids);
- if(env->ExceptionCheck()) {
- // exception thrown: InstantiationException or OutOfMemoryError
- env->DeleteLocalRef(jkey);
- env->DeleteLocalRef(jtransaction_ids);
- return nullptr;
- }
- return jwaiting_transactions;
- }
- };
- // The portal class for org.rocksdb.TransactionDB
- class TransactionDBJni : public JavaClass {
- public:
- /**
- * Get the Java Class org.rocksdb.TransactionDB
- *
- * @param env A pointer to the Java environment
- *
- * @return The Java Class or nullptr if one of the
- * ClassFormatError, ClassCircularityError, NoClassDefFoundError,
- * OutOfMemoryError or ExceptionInInitializerError exceptions is thrown
- */
- static jclass getJClass(JNIEnv* env) {
- return JavaClass::getJClass(env,
- "org/rocksdb/TransactionDB");
- }
- /**
- * Create a new Java org.rocksdb.TransactionDB.DeadlockInfo object
- *
- * @param env A pointer to the Java environment
- * @param jtransaction A Java org.rocksdb.Transaction object
- * @param column_family_id The id of the column family
- * @param key The key
- * @param transaction_ids The transaction ids
- *
- * @return A reference to a Java
- * org.rocksdb.Transaction.WaitingTransactions object,
- * or nullptr if an an exception occurs
- */
- static jobject newDeadlockInfo(
- JNIEnv* env, jobject jtransaction_db,
- const ROCKSDB_NAMESPACE::TransactionID transaction_id,
- const uint32_t column_family_id, const std::string& waiting_key,
- const bool exclusive) {
- jclass jclazz = getJClass(env);
- if(jclazz == nullptr) {
- // exception occurred accessing class
- return nullptr;
- }
- jmethodID mid = env->GetMethodID(
- jclazz, "newDeadlockInfo", "(JJLjava/lang/String;Z)Lorg/rocksdb/TransactionDB$DeadlockInfo;");
- if(mid == nullptr) {
- // exception thrown: NoSuchMethodException or OutOfMemoryError
- return nullptr;
- }
- jstring jwaiting_key = env->NewStringUTF(waiting_key.c_str());
- if(jwaiting_key == nullptr) {
- // exception thrown: OutOfMemoryError
- return nullptr;
- }
- // resolve the column family id to a ColumnFamilyHandle
- jobject jdeadlock_info = env->CallObjectMethod(jtransaction_db,
- mid, transaction_id, static_cast<jlong>(column_family_id),
- jwaiting_key, exclusive);
- if(env->ExceptionCheck()) {
- // exception thrown: InstantiationException or OutOfMemoryError
- env->DeleteLocalRef(jwaiting_key);
- return nullptr;
- }
- return jdeadlock_info;
- }
- };
- // The portal class for org.rocksdb.TxnDBWritePolicy
- class TxnDBWritePolicyJni {
- public:
- // Returns the equivalent org.rocksdb.TxnDBWritePolicy for the provided
- // C++ ROCKSDB_NAMESPACE::TxnDBWritePolicy enum
- static jbyte toJavaTxnDBWritePolicy(
- const ROCKSDB_NAMESPACE::TxnDBWritePolicy& txndb_write_policy) {
- switch (txndb_write_policy) {
- case ROCKSDB_NAMESPACE::TxnDBWritePolicy::WRITE_COMMITTED:
- return 0x0;
- case ROCKSDB_NAMESPACE::TxnDBWritePolicy::WRITE_PREPARED:
- return 0x1;
- case ROCKSDB_NAMESPACE::TxnDBWritePolicy::WRITE_UNPREPARED:
- return 0x2;
- default:
- return 0x7F; // undefined
- }
- }
- // Returns the equivalent C++ ROCKSDB_NAMESPACE::TxnDBWritePolicy enum for the
- // provided Java org.rocksdb.TxnDBWritePolicy
- static ROCKSDB_NAMESPACE::TxnDBWritePolicy toCppTxnDBWritePolicy(
- jbyte jtxndb_write_policy) {
- switch (jtxndb_write_policy) {
- case 0x0:
- return ROCKSDB_NAMESPACE::TxnDBWritePolicy::WRITE_COMMITTED;
- case 0x1:
- return ROCKSDB_NAMESPACE::TxnDBWritePolicy::WRITE_PREPARED;
- case 0x2:
- return ROCKSDB_NAMESPACE::TxnDBWritePolicy::WRITE_UNPREPARED;
- default:
- // undefined/default
- return ROCKSDB_NAMESPACE::TxnDBWritePolicy::WRITE_COMMITTED;
- }
- }
- };
- // The portal class for org.rocksdb.TransactionDB.KeyLockInfo
- class KeyLockInfoJni : public JavaClass {
- public:
- /**
- * Get the Java Class org.rocksdb.TransactionDB.KeyLockInfo
- *
- * @param env A pointer to the Java environment
- *
- * @return The Java Class or nullptr if one of the
- * ClassFormatError, ClassCircularityError, NoClassDefFoundError,
- * OutOfMemoryError or ExceptionInInitializerError exceptions is thrown
- */
- static jclass getJClass(JNIEnv* env) {
- return JavaClass::getJClass(env,
- "org/rocksdb/TransactionDB$KeyLockInfo");
- }
- /**
- * Create a new Java org.rocksdb.TransactionDB.KeyLockInfo object
- * with the same properties as the provided C++ ROCKSDB_NAMESPACE::KeyLockInfo
- * object
- *
- * @param env A pointer to the Java environment
- * @param key_lock_info The ROCKSDB_NAMESPACE::KeyLockInfo object
- *
- * @return A reference to a Java
- * org.rocksdb.TransactionDB.KeyLockInfo object,
- * or nullptr if an an exception occurs
- */
- static jobject construct(
- JNIEnv* env, const ROCKSDB_NAMESPACE::KeyLockInfo& key_lock_info) {
- jclass jclazz = getJClass(env);
- if(jclazz == nullptr) {
- // exception occurred accessing class
- return nullptr;
- }
- jmethodID mid = env->GetMethodID(
- jclazz, "<init>", "(Ljava/lang/String;[JZ)V");
- if (mid == nullptr) {
- // exception thrown: NoSuchMethodException or OutOfMemoryError
- return nullptr;
- }
- jstring jkey = env->NewStringUTF(key_lock_info.key.c_str());
- if (jkey == nullptr) {
- // exception thrown: OutOfMemoryError
- return nullptr;
- }
- const jsize jtransaction_ids_len = static_cast<jsize>(key_lock_info.ids.size());
- jlongArray jtransactions_ids = env->NewLongArray(jtransaction_ids_len);
- if (jtransactions_ids == nullptr) {
- // exception thrown: OutOfMemoryError
- env->DeleteLocalRef(jkey);
- return nullptr;
- }
- const jobject jkey_lock_info = env->NewObject(jclazz, mid,
- jkey, jtransactions_ids, key_lock_info.exclusive);
- if(jkey_lock_info == nullptr) {
- // exception thrown: InstantiationException or OutOfMemoryError
- env->DeleteLocalRef(jtransactions_ids);
- env->DeleteLocalRef(jkey);
- return nullptr;
- }
- return jkey_lock_info;
- }
- };
- // The portal class for org.rocksdb.TransactionDB.DeadlockInfo
- class DeadlockInfoJni : public JavaClass {
- public:
- /**
- * Get the Java Class org.rocksdb.TransactionDB.DeadlockInfo
- *
- * @param env A pointer to the Java environment
- *
- * @return The Java Class or nullptr if one of the
- * ClassFormatError, ClassCircularityError, NoClassDefFoundError,
- * OutOfMemoryError or ExceptionInInitializerError exceptions is thrown
- */
- static jclass getJClass(JNIEnv* env) {
- return JavaClass::getJClass(env,"org/rocksdb/TransactionDB$DeadlockInfo");
- }
- };
- // The portal class for org.rocksdb.TransactionDB.DeadlockPath
- class DeadlockPathJni : public JavaClass {
- public:
- /**
- * Get the Java Class org.rocksdb.TransactionDB.DeadlockPath
- *
- * @param env A pointer to the Java environment
- *
- * @return The Java Class or nullptr if one of the
- * ClassFormatError, ClassCircularityError, NoClassDefFoundError,
- * OutOfMemoryError or ExceptionInInitializerError exceptions is thrown
- */
- static jclass getJClass(JNIEnv* env) {
- return JavaClass::getJClass(env,
- "org/rocksdb/TransactionDB$DeadlockPath");
- }
- /**
- * Create a new Java org.rocksdb.TransactionDB.DeadlockPath object
- *
- * @param env A pointer to the Java environment
- *
- * @return A reference to a Java
- * org.rocksdb.TransactionDB.DeadlockPath object,
- * or nullptr if an an exception occurs
- */
- static jobject construct(JNIEnv* env,
- const jobjectArray jdeadlock_infos, const bool limit_exceeded) {
- jclass jclazz = getJClass(env);
- if(jclazz == nullptr) {
- // exception occurred accessing class
- return nullptr;
- }
- jmethodID mid = env->GetMethodID(
- jclazz, "<init>", "([LDeadlockInfo;Z)V");
- if (mid == nullptr) {
- // exception thrown: NoSuchMethodException or OutOfMemoryError
- return nullptr;
- }
- const jobject jdeadlock_path = env->NewObject(jclazz, mid,
- jdeadlock_infos, limit_exceeded);
- if(jdeadlock_path == nullptr) {
- // exception thrown: InstantiationException or OutOfMemoryError
- return nullptr;
- }
- return jdeadlock_path;
- }
- };
- class AbstractTableFilterJni
- : public RocksDBNativeClass<
- const ROCKSDB_NAMESPACE::TableFilterJniCallback*,
- AbstractTableFilterJni> {
- public:
- /**
- * Get the Java Method: TableFilter#filter(TableProperties)
- *
- * @param env A pointer to the Java environment
- *
- * @return The Java Method ID or nullptr if the class or method id could not
- * be retieved
- */
- static jmethodID getFilterMethod(JNIEnv* env) {
- jclass jclazz = getJClass(env);
- if(jclazz == nullptr) {
- // exception occurred accessing class
- return nullptr;
- }
- static jmethodID mid =
- env->GetMethodID(jclazz, "filter", "(Lorg/rocksdb/TableProperties;)Z");
- assert(mid != nullptr);
- return mid;
- }
- private:
- static jclass getJClass(JNIEnv* env) {
- return JavaClass::getJClass(env, "org/rocksdb/TableFilter");
- }
- };
- class TablePropertiesJni : public JavaClass {
- public:
- /**
- * Create a new Java org.rocksdb.TableProperties object.
- *
- * @param env A pointer to the Java environment
- * @param table_properties A Cpp table properties object
- *
- * @return A reference to a Java org.rocksdb.TableProperties object, or
- * nullptr if an an exception occurs
- */
- static jobject fromCppTableProperties(
- JNIEnv* env, const ROCKSDB_NAMESPACE::TableProperties& table_properties) {
- jclass jclazz = getJClass(env);
- if (jclazz == nullptr) {
- // exception occurred accessing class
- return nullptr;
- }
- jmethodID mid = env->GetMethodID(jclazz, "<init>", "(JJJJJJJJJJJJJJJJJJJ[BLjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;Ljava/util/Map;Ljava/util/Map;)V");
- if (mid == nullptr) {
- // exception thrown: NoSuchMethodException or OutOfMemoryError
- return nullptr;
- }
- jbyteArray jcolumn_family_name = ROCKSDB_NAMESPACE::JniUtil::copyBytes(
- env, table_properties.column_family_name);
- if (jcolumn_family_name == nullptr) {
- // exception occurred creating java string
- return nullptr;
- }
- jstring jfilter_policy_name = ROCKSDB_NAMESPACE::JniUtil::toJavaString(
- env, &table_properties.filter_policy_name, true);
- if (env->ExceptionCheck()) {
- // exception occurred creating java string
- env->DeleteLocalRef(jcolumn_family_name);
- return nullptr;
- }
- jstring jcomparator_name = ROCKSDB_NAMESPACE::JniUtil::toJavaString(
- env, &table_properties.comparator_name, true);
- if (env->ExceptionCheck()) {
- // exception occurred creating java string
- env->DeleteLocalRef(jcolumn_family_name);
- env->DeleteLocalRef(jfilter_policy_name);
- return nullptr;
- }
- jstring jmerge_operator_name = ROCKSDB_NAMESPACE::JniUtil::toJavaString(
- env, &table_properties.merge_operator_name, true);
- if (env->ExceptionCheck()) {
- // exception occurred creating java string
- env->DeleteLocalRef(jcolumn_family_name);
- env->DeleteLocalRef(jfilter_policy_name);
- env->DeleteLocalRef(jcomparator_name);
- return nullptr;
- }
- jstring jprefix_extractor_name = ROCKSDB_NAMESPACE::JniUtil::toJavaString(
- env, &table_properties.prefix_extractor_name, true);
- if (env->ExceptionCheck()) {
- // exception occurred creating java string
- env->DeleteLocalRef(jcolumn_family_name);
- env->DeleteLocalRef(jfilter_policy_name);
- env->DeleteLocalRef(jcomparator_name);
- env->DeleteLocalRef(jmerge_operator_name);
- return nullptr;
- }
- jstring jproperty_collectors_names =
- ROCKSDB_NAMESPACE::JniUtil::toJavaString(
- env, &table_properties.property_collectors_names, true);
- if (env->ExceptionCheck()) {
- // exception occurred creating java string
- env->DeleteLocalRef(jcolumn_family_name);
- env->DeleteLocalRef(jfilter_policy_name);
- env->DeleteLocalRef(jcomparator_name);
- env->DeleteLocalRef(jmerge_operator_name);
- env->DeleteLocalRef(jprefix_extractor_name);
- return nullptr;
- }
- jstring jcompression_name = ROCKSDB_NAMESPACE::JniUtil::toJavaString(
- env, &table_properties.compression_name, true);
- if (env->ExceptionCheck()) {
- // exception occurred creating java string
- env->DeleteLocalRef(jcolumn_family_name);
- env->DeleteLocalRef(jfilter_policy_name);
- env->DeleteLocalRef(jcomparator_name);
- env->DeleteLocalRef(jmerge_operator_name);
- env->DeleteLocalRef(jprefix_extractor_name);
- env->DeleteLocalRef(jproperty_collectors_names);
- return nullptr;
- }
- // Map<String, String>
- jobject juser_collected_properties =
- ROCKSDB_NAMESPACE::HashMapJni::fromCppMap(
- env, &table_properties.user_collected_properties);
- if (env->ExceptionCheck()) {
- // exception occurred creating java map
- env->DeleteLocalRef(jcolumn_family_name);
- env->DeleteLocalRef(jfilter_policy_name);
- env->DeleteLocalRef(jcomparator_name);
- env->DeleteLocalRef(jmerge_operator_name);
- env->DeleteLocalRef(jprefix_extractor_name);
- env->DeleteLocalRef(jproperty_collectors_names);
- env->DeleteLocalRef(jcompression_name);
- return nullptr;
- }
- // Map<String, String>
- jobject jreadable_properties = ROCKSDB_NAMESPACE::HashMapJni::fromCppMap(
- env, &table_properties.readable_properties);
- if (env->ExceptionCheck()) {
- // exception occurred creating java map
- env->DeleteLocalRef(jcolumn_family_name);
- env->DeleteLocalRef(jfilter_policy_name);
- env->DeleteLocalRef(jcomparator_name);
- env->DeleteLocalRef(jmerge_operator_name);
- env->DeleteLocalRef(jprefix_extractor_name);
- env->DeleteLocalRef(jproperty_collectors_names);
- env->DeleteLocalRef(jcompression_name);
- env->DeleteLocalRef(juser_collected_properties);
- return nullptr;
- }
- // Map<String, Long>
- jobject jproperties_offsets = ROCKSDB_NAMESPACE::HashMapJni::fromCppMap(
- env, &table_properties.properties_offsets);
- if (env->ExceptionCheck()) {
- // exception occurred creating java map
- env->DeleteLocalRef(jcolumn_family_name);
- env->DeleteLocalRef(jfilter_policy_name);
- env->DeleteLocalRef(jcomparator_name);
- env->DeleteLocalRef(jmerge_operator_name);
- env->DeleteLocalRef(jprefix_extractor_name);
- env->DeleteLocalRef(jproperty_collectors_names);
- env->DeleteLocalRef(jcompression_name);
- env->DeleteLocalRef(juser_collected_properties);
- env->DeleteLocalRef(jreadable_properties);
- return nullptr;
- }
- jobject jtable_properties = env->NewObject(jclazz, mid,
- static_cast<jlong>(table_properties.data_size),
- static_cast<jlong>(table_properties.index_size),
- static_cast<jlong>(table_properties.index_partitions),
- static_cast<jlong>(table_properties.top_level_index_size),
- static_cast<jlong>(table_properties.index_key_is_user_key),
- static_cast<jlong>(table_properties.index_value_is_delta_encoded),
- static_cast<jlong>(table_properties.filter_size),
- static_cast<jlong>(table_properties.raw_key_size),
- static_cast<jlong>(table_properties.raw_value_size),
- static_cast<jlong>(table_properties.num_data_blocks),
- static_cast<jlong>(table_properties.num_entries),
- static_cast<jlong>(table_properties.num_deletions),
- static_cast<jlong>(table_properties.num_merge_operands),
- static_cast<jlong>(table_properties.num_range_deletions),
- static_cast<jlong>(table_properties.format_version),
- static_cast<jlong>(table_properties.fixed_key_len),
- static_cast<jlong>(table_properties.column_family_id),
- static_cast<jlong>(table_properties.creation_time),
- static_cast<jlong>(table_properties.oldest_key_time),
- jcolumn_family_name,
- jfilter_policy_name,
- jcomparator_name,
- jmerge_operator_name,
- jprefix_extractor_name,
- jproperty_collectors_names,
- jcompression_name,
- juser_collected_properties,
- jreadable_properties,
- jproperties_offsets
- );
- if (env->ExceptionCheck()) {
- return nullptr;
- }
- return jtable_properties;
- }
- private:
- static jclass getJClass(JNIEnv* env) {
- return JavaClass::getJClass(env, "org/rocksdb/TableProperties");
- }
- };
- class ColumnFamilyDescriptorJni : public JavaClass {
- public:
- /**
- * Get the Java Class org.rocksdb.ColumnFamilyDescriptor
- *
- * @param env A pointer to the Java environment
- *
- * @return The Java Class or nullptr if one of the
- * ClassFormatError, ClassCircularityError, NoClassDefFoundError,
- * OutOfMemoryError or ExceptionInInitializerError exceptions is thrown
- */
- static jclass getJClass(JNIEnv* env) {
- return JavaClass::getJClass(env, "org/rocksdb/ColumnFamilyDescriptor");
- }
- /**
- * Create a new Java org.rocksdb.ColumnFamilyDescriptor object with the same
- * properties as the provided C++ ROCKSDB_NAMESPACE::ColumnFamilyDescriptor
- * object
- *
- * @param env A pointer to the Java environment
- * @param cfd A pointer to ROCKSDB_NAMESPACE::ColumnFamilyDescriptor object
- *
- * @return A reference to a Java org.rocksdb.ColumnFamilyDescriptor object, or
- * nullptr if an an exception occurs
- */
- static jobject construct(JNIEnv* env, ColumnFamilyDescriptor* cfd) {
- jbyteArray jcf_name = JniUtil::copyBytes(env, cfd->name);
- jobject cfopts = ColumnFamilyOptionsJni::construct(env, &(cfd->options));
- jclass jclazz = getJClass(env);
- if (jclazz == nullptr) {
- // exception occurred accessing class
- return nullptr;
- }
- jmethodID mid = env->GetMethodID(jclazz, "<init>",
- "([BLorg/rocksdb/ColumnFamilyOptions;)V");
- if (mid == nullptr) {
- // exception thrown: NoSuchMethodException or OutOfMemoryError
- env->DeleteLocalRef(jcf_name);
- return nullptr;
- }
- jobject jcfd = env->NewObject(jclazz, mid, jcf_name, cfopts);
- if (env->ExceptionCheck()) {
- env->DeleteLocalRef(jcf_name);
- return nullptr;
- }
- return jcfd;
- }
- /**
- * Get the Java Method: ColumnFamilyDescriptor#columnFamilyName
- *
- * @param env A pointer to the Java environment
- *
- * @return The Java Method ID or nullptr if the class or method id could not
- * be retieved
- */
- static jmethodID getColumnFamilyNameMethod(JNIEnv* env) {
- jclass jclazz = getJClass(env);
- if (jclazz == nullptr) {
- // exception occurred accessing class
- return nullptr;
- }
- static jmethodID mid = env->GetMethodID(jclazz, "columnFamilyName", "()[B");
- assert(mid != nullptr);
- return mid;
- }
- /**
- * Get the Java Method: ColumnFamilyDescriptor#columnFamilyOptions
- *
- * @param env A pointer to the Java environment
- *
- * @return The Java Method ID or nullptr if the class or method id could not
- * be retieved
- */
- static jmethodID getColumnFamilyOptionsMethod(JNIEnv* env) {
- jclass jclazz = getJClass(env);
- if (jclazz == nullptr) {
- // exception occurred accessing class
- return nullptr;
- }
- static jmethodID mid = env->GetMethodID(
- jclazz, "columnFamilyOptions", "()Lorg/rocksdb/ColumnFamilyOptions;");
- assert(mid != nullptr);
- return mid;
- }
- };
- // The portal class for org.rocksdb.IndexType
- class IndexTypeJni {
- public:
- // Returns the equivalent org.rocksdb.IndexType for the provided
- // C++ ROCKSDB_NAMESPACE::IndexType enum
- static jbyte toJavaIndexType(
- const ROCKSDB_NAMESPACE::BlockBasedTableOptions::IndexType& index_type) {
- switch (index_type) {
- case ROCKSDB_NAMESPACE::BlockBasedTableOptions::IndexType::kBinarySearch:
- return 0x0;
- case ROCKSDB_NAMESPACE::BlockBasedTableOptions::IndexType::kHashSearch:
- return 0x1;
- case ROCKSDB_NAMESPACE::BlockBasedTableOptions::IndexType::
- kTwoLevelIndexSearch:
- return 0x2;
- case ROCKSDB_NAMESPACE::BlockBasedTableOptions::IndexType::
- kBinarySearchWithFirstKey:
- return 0x3;
- default:
- return 0x7F; // undefined
- }
- }
- // Returns the equivalent C++ ROCKSDB_NAMESPACE::IndexType enum for the
- // provided Java org.rocksdb.IndexType
- static ROCKSDB_NAMESPACE::BlockBasedTableOptions::IndexType toCppIndexType(
- jbyte jindex_type) {
- switch (jindex_type) {
- case 0x0:
- return ROCKSDB_NAMESPACE::BlockBasedTableOptions::IndexType::
- kBinarySearch;
- case 0x1:
- return ROCKSDB_NAMESPACE::BlockBasedTableOptions::IndexType::
- kHashSearch;
- case 0x2:
- return ROCKSDB_NAMESPACE::BlockBasedTableOptions::IndexType::
- kTwoLevelIndexSearch;
- case 0x3:
- return ROCKSDB_NAMESPACE::BlockBasedTableOptions::IndexType::
- kBinarySearchWithFirstKey;
- default:
- // undefined/default
- return ROCKSDB_NAMESPACE::BlockBasedTableOptions::IndexType::
- kBinarySearch;
- }
- }
- };
- // The portal class for org.rocksdb.DataBlockIndexType
- class DataBlockIndexTypeJni {
- public:
- // Returns the equivalent org.rocksdb.DataBlockIndexType for the provided
- // C++ ROCKSDB_NAMESPACE::DataBlockIndexType enum
- static jbyte toJavaDataBlockIndexType(
- const ROCKSDB_NAMESPACE::BlockBasedTableOptions::DataBlockIndexType&
- index_type) {
- switch (index_type) {
- case ROCKSDB_NAMESPACE::BlockBasedTableOptions::DataBlockIndexType::
- kDataBlockBinarySearch:
- return 0x0;
- case ROCKSDB_NAMESPACE::BlockBasedTableOptions::DataBlockIndexType::
- kDataBlockBinaryAndHash:
- return 0x1;
- default:
- return 0x7F; // undefined
- }
- }
- // Returns the equivalent C++ ROCKSDB_NAMESPACE::DataBlockIndexType enum for
- // the provided Java org.rocksdb.DataBlockIndexType
- static ROCKSDB_NAMESPACE::BlockBasedTableOptions::DataBlockIndexType
- toCppDataBlockIndexType(jbyte jindex_type) {
- switch (jindex_type) {
- case 0x0:
- return ROCKSDB_NAMESPACE::BlockBasedTableOptions::DataBlockIndexType::
- kDataBlockBinarySearch;
- case 0x1:
- return ROCKSDB_NAMESPACE::BlockBasedTableOptions::DataBlockIndexType::
- kDataBlockBinaryAndHash;
- default:
- // undefined/default
- return ROCKSDB_NAMESPACE::BlockBasedTableOptions::DataBlockIndexType::
- kDataBlockBinarySearch;
- }
- }
- };
- // The portal class for org.rocksdb.ChecksumType
- class ChecksumTypeJni {
- public:
- // Returns the equivalent org.rocksdb.ChecksumType for the provided
- // C++ ROCKSDB_NAMESPACE::ChecksumType enum
- static jbyte toJavaChecksumType(
- const ROCKSDB_NAMESPACE::ChecksumType& checksum_type) {
- switch (checksum_type) {
- case ROCKSDB_NAMESPACE::ChecksumType::kNoChecksum:
- return 0x0;
- case ROCKSDB_NAMESPACE::ChecksumType::kCRC32c:
- return 0x1;
- case ROCKSDB_NAMESPACE::ChecksumType::kxxHash:
- return 0x2;
- case ROCKSDB_NAMESPACE::ChecksumType::kxxHash64:
- return 0x3;
- default:
- return 0x7F; // undefined
- }
- }
- // Returns the equivalent C++ ROCKSDB_NAMESPACE::ChecksumType enum for the
- // provided Java org.rocksdb.ChecksumType
- static ROCKSDB_NAMESPACE::ChecksumType toCppChecksumType(
- jbyte jchecksum_type) {
- switch (jchecksum_type) {
- case 0x0:
- return ROCKSDB_NAMESPACE::ChecksumType::kNoChecksum;
- case 0x1:
- return ROCKSDB_NAMESPACE::ChecksumType::kCRC32c;
- case 0x2:
- return ROCKSDB_NAMESPACE::ChecksumType::kxxHash;
- case 0x3:
- return ROCKSDB_NAMESPACE::ChecksumType::kxxHash64;
- default:
- // undefined/default
- return ROCKSDB_NAMESPACE::ChecksumType::kCRC32c;
- }
- }
- };
- // The portal class for org.rocksdb.Priority
- class PriorityJni {
- public:
- // Returns the equivalent org.rocksdb.Priority for the provided
- // C++ ROCKSDB_NAMESPACE::Env::Priority enum
- static jbyte toJavaPriority(
- const ROCKSDB_NAMESPACE::Env::Priority& priority) {
- switch (priority) {
- case ROCKSDB_NAMESPACE::Env::Priority::BOTTOM:
- return 0x0;
- case ROCKSDB_NAMESPACE::Env::Priority::LOW:
- return 0x1;
- case ROCKSDB_NAMESPACE::Env::Priority::HIGH:
- return 0x2;
- case ROCKSDB_NAMESPACE::Env::Priority::TOTAL:
- return 0x3;
- default:
- return 0x7F; // undefined
- }
- }
- // Returns the equivalent C++ ROCKSDB_NAMESPACE::env::Priority enum for the
- // provided Java org.rocksdb.Priority
- static ROCKSDB_NAMESPACE::Env::Priority toCppPriority(jbyte jpriority) {
- switch (jpriority) {
- case 0x0:
- return ROCKSDB_NAMESPACE::Env::Priority::BOTTOM;
- case 0x1:
- return ROCKSDB_NAMESPACE::Env::Priority::LOW;
- case 0x2:
- return ROCKSDB_NAMESPACE::Env::Priority::HIGH;
- case 0x3:
- return ROCKSDB_NAMESPACE::Env::Priority::TOTAL;
- default:
- // undefined/default
- return ROCKSDB_NAMESPACE::Env::Priority::LOW;
- }
- }
- };
- // The portal class for org.rocksdb.ThreadType
- class ThreadTypeJni {
- public:
- // Returns the equivalent org.rocksdb.ThreadType for the provided
- // C++ ROCKSDB_NAMESPACE::ThreadStatus::ThreadType enum
- static jbyte toJavaThreadType(
- const ROCKSDB_NAMESPACE::ThreadStatus::ThreadType& thread_type) {
- switch (thread_type) {
- case ROCKSDB_NAMESPACE::ThreadStatus::ThreadType::HIGH_PRIORITY:
- return 0x0;
- case ROCKSDB_NAMESPACE::ThreadStatus::ThreadType::LOW_PRIORITY:
- return 0x1;
- case ROCKSDB_NAMESPACE::ThreadStatus::ThreadType::USER:
- return 0x2;
- case ROCKSDB_NAMESPACE::ThreadStatus::ThreadType::BOTTOM_PRIORITY:
- return 0x3;
- default:
- return 0x7F; // undefined
- }
- }
- // Returns the equivalent C++ ROCKSDB_NAMESPACE::ThreadStatus::ThreadType enum
- // for the provided Java org.rocksdb.ThreadType
- static ROCKSDB_NAMESPACE::ThreadStatus::ThreadType toCppThreadType(
- jbyte jthread_type) {
- switch (jthread_type) {
- case 0x0:
- return ROCKSDB_NAMESPACE::ThreadStatus::ThreadType::HIGH_PRIORITY;
- case 0x1:
- return ROCKSDB_NAMESPACE::ThreadStatus::ThreadType::LOW_PRIORITY;
- case 0x2:
- return ThreadStatus::ThreadType::USER;
- case 0x3:
- return ROCKSDB_NAMESPACE::ThreadStatus::ThreadType::BOTTOM_PRIORITY;
- default:
- // undefined/default
- return ROCKSDB_NAMESPACE::ThreadStatus::ThreadType::LOW_PRIORITY;
- }
- }
- };
- // The portal class for org.rocksdb.OperationType
- class OperationTypeJni {
- public:
- // Returns the equivalent org.rocksdb.OperationType for the provided
- // C++ ROCKSDB_NAMESPACE::ThreadStatus::OperationType enum
- static jbyte toJavaOperationType(
- const ROCKSDB_NAMESPACE::ThreadStatus::OperationType& operation_type) {
- switch (operation_type) {
- case ROCKSDB_NAMESPACE::ThreadStatus::OperationType::OP_UNKNOWN:
- return 0x0;
- case ROCKSDB_NAMESPACE::ThreadStatus::OperationType::OP_COMPACTION:
- return 0x1;
- case ROCKSDB_NAMESPACE::ThreadStatus::OperationType::OP_FLUSH:
- return 0x2;
- default:
- return 0x7F; // undefined
- }
- }
- // Returns the equivalent C++ ROCKSDB_NAMESPACE::ThreadStatus::OperationType
- // enum for the provided Java org.rocksdb.OperationType
- static ROCKSDB_NAMESPACE::ThreadStatus::OperationType toCppOperationType(
- jbyte joperation_type) {
- switch (joperation_type) {
- case 0x0:
- return ROCKSDB_NAMESPACE::ThreadStatus::OperationType::OP_UNKNOWN;
- case 0x1:
- return ROCKSDB_NAMESPACE::ThreadStatus::OperationType::OP_COMPACTION;
- case 0x2:
- return ROCKSDB_NAMESPACE::ThreadStatus::OperationType::OP_FLUSH;
- default:
- // undefined/default
- return ROCKSDB_NAMESPACE::ThreadStatus::OperationType::OP_UNKNOWN;
- }
- }
- };
- // The portal class for org.rocksdb.OperationStage
- class OperationStageJni {
- public:
- // Returns the equivalent org.rocksdb.OperationStage for the provided
- // C++ ROCKSDB_NAMESPACE::ThreadStatus::OperationStage enum
- static jbyte toJavaOperationStage(
- const ROCKSDB_NAMESPACE::ThreadStatus::OperationStage& operation_stage) {
- switch (operation_stage) {
- case ROCKSDB_NAMESPACE::ThreadStatus::OperationStage::STAGE_UNKNOWN:
- return 0x0;
- case ROCKSDB_NAMESPACE::ThreadStatus::OperationStage::STAGE_FLUSH_RUN:
- return 0x1;
- case ROCKSDB_NAMESPACE::ThreadStatus::OperationStage::
- STAGE_FLUSH_WRITE_L0:
- return 0x2;
- case ROCKSDB_NAMESPACE::ThreadStatus::OperationStage::
- STAGE_COMPACTION_PREPARE:
- return 0x3;
- case ROCKSDB_NAMESPACE::ThreadStatus::OperationStage::
- STAGE_COMPACTION_RUN:
- return 0x4;
- case ROCKSDB_NAMESPACE::ThreadStatus::OperationStage::
- STAGE_COMPACTION_PROCESS_KV:
- return 0x5;
- case ROCKSDB_NAMESPACE::ThreadStatus::OperationStage::
- STAGE_COMPACTION_INSTALL:
- return 0x6;
- case ROCKSDB_NAMESPACE::ThreadStatus::OperationStage::
- STAGE_COMPACTION_SYNC_FILE:
- return 0x7;
- case ROCKSDB_NAMESPACE::ThreadStatus::OperationStage::
- STAGE_PICK_MEMTABLES_TO_FLUSH:
- return 0x8;
- case ROCKSDB_NAMESPACE::ThreadStatus::OperationStage::
- STAGE_MEMTABLE_ROLLBACK:
- return 0x9;
- case ROCKSDB_NAMESPACE::ThreadStatus::OperationStage::
- STAGE_MEMTABLE_INSTALL_FLUSH_RESULTS:
- return 0xA;
- default:
- return 0x7F; // undefined
- }
- }
- // Returns the equivalent C++ ROCKSDB_NAMESPACE::ThreadStatus::OperationStage
- // enum for the provided Java org.rocksdb.OperationStage
- static ROCKSDB_NAMESPACE::ThreadStatus::OperationStage toCppOperationStage(
- jbyte joperation_stage) {
- switch (joperation_stage) {
- case 0x0:
- return ROCKSDB_NAMESPACE::ThreadStatus::OperationStage::STAGE_UNKNOWN;
- case 0x1:
- return ROCKSDB_NAMESPACE::ThreadStatus::OperationStage::STAGE_FLUSH_RUN;
- case 0x2:
- return ROCKSDB_NAMESPACE::ThreadStatus::OperationStage::
- STAGE_FLUSH_WRITE_L0;
- case 0x3:
- return ROCKSDB_NAMESPACE::ThreadStatus::OperationStage::
- STAGE_COMPACTION_PREPARE;
- case 0x4:
- return ROCKSDB_NAMESPACE::ThreadStatus::OperationStage::
- STAGE_COMPACTION_RUN;
- case 0x5:
- return ROCKSDB_NAMESPACE::ThreadStatus::OperationStage::
- STAGE_COMPACTION_PROCESS_KV;
- case 0x6:
- return ROCKSDB_NAMESPACE::ThreadStatus::OperationStage::
- STAGE_COMPACTION_INSTALL;
- case 0x7:
- return ROCKSDB_NAMESPACE::ThreadStatus::OperationStage::
- STAGE_COMPACTION_SYNC_FILE;
- case 0x8:
- return ROCKSDB_NAMESPACE::ThreadStatus::OperationStage::
- STAGE_PICK_MEMTABLES_TO_FLUSH;
- case 0x9:
- return ROCKSDB_NAMESPACE::ThreadStatus::OperationStage::
- STAGE_MEMTABLE_ROLLBACK;
- case 0xA:
- return ROCKSDB_NAMESPACE::ThreadStatus::OperationStage::
- STAGE_MEMTABLE_INSTALL_FLUSH_RESULTS;
- default:
- // undefined/default
- return ROCKSDB_NAMESPACE::ThreadStatus::OperationStage::STAGE_UNKNOWN;
- }
- }
- };
- // The portal class for org.rocksdb.StateType
- class StateTypeJni {
- public:
- // Returns the equivalent org.rocksdb.StateType for the provided
- // C++ ROCKSDB_NAMESPACE::ThreadStatus::StateType enum
- static jbyte toJavaStateType(
- const ROCKSDB_NAMESPACE::ThreadStatus::StateType& state_type) {
- switch (state_type) {
- case ROCKSDB_NAMESPACE::ThreadStatus::StateType::STATE_UNKNOWN:
- return 0x0;
- case ROCKSDB_NAMESPACE::ThreadStatus::StateType::STATE_MUTEX_WAIT:
- return 0x1;
- default:
- return 0x7F; // undefined
- }
- }
- // Returns the equivalent C++ ROCKSDB_NAMESPACE::ThreadStatus::StateType enum
- // for the provided Java org.rocksdb.StateType
- static ROCKSDB_NAMESPACE::ThreadStatus::StateType toCppStateType(
- jbyte jstate_type) {
- switch (jstate_type) {
- case 0x0:
- return ROCKSDB_NAMESPACE::ThreadStatus::StateType::STATE_UNKNOWN;
- case 0x1:
- return ROCKSDB_NAMESPACE::ThreadStatus::StateType::STATE_MUTEX_WAIT;
- default:
- // undefined/default
- return ROCKSDB_NAMESPACE::ThreadStatus::StateType::STATE_UNKNOWN;
- }
- }
- };
- // The portal class for org.rocksdb.ThreadStatus
- class ThreadStatusJni : public JavaClass {
- public:
- /**
- * Get the Java Class org.rocksdb.ThreadStatus
- *
- * @param env A pointer to the Java environment
- *
- * @return The Java Class or nullptr if one of the
- * ClassFormatError, ClassCircularityError, NoClassDefFoundError,
- * OutOfMemoryError or ExceptionInInitializerError exceptions is thrown
- */
- static jclass getJClass(JNIEnv* env) {
- return JavaClass::getJClass(env,
- "org/rocksdb/ThreadStatus");
- }
- /**
- * Create a new Java org.rocksdb.ThreadStatus object with the same
- * properties as the provided C++ ROCKSDB_NAMESPACE::ThreadStatus object
- *
- * @param env A pointer to the Java environment
- * @param thread_status A pointer to ROCKSDB_NAMESPACE::ThreadStatus object
- *
- * @return A reference to a Java org.rocksdb.ColumnFamilyOptions object, or
- * nullptr if an an exception occurs
- */
- static jobject construct(
- JNIEnv* env, const ROCKSDB_NAMESPACE::ThreadStatus* thread_status) {
- jclass jclazz = getJClass(env);
- if(jclazz == nullptr) {
- // exception occurred accessing class
- return nullptr;
- }
- jmethodID mid = env->GetMethodID(jclazz, "<init>", "(JBLjava/lang/String;Ljava/lang/String;BJB[JB)V");
- if (mid == nullptr) {
- // exception thrown: NoSuchMethodException or OutOfMemoryError
- return nullptr;
- }
- jstring jdb_name =
- JniUtil::toJavaString(env, &(thread_status->db_name), true);
- if (env->ExceptionCheck()) {
- // an error occurred
- return nullptr;
- }
- jstring jcf_name =
- JniUtil::toJavaString(env, &(thread_status->cf_name), true);
- if (env->ExceptionCheck()) {
- // an error occurred
- env->DeleteLocalRef(jdb_name);
- return nullptr;
- }
- // long[]
- const jsize len = static_cast<jsize>(
- ROCKSDB_NAMESPACE::ThreadStatus::kNumOperationProperties);
- jlongArray joperation_properties =
- env->NewLongArray(len);
- if (joperation_properties == nullptr) {
- // an exception occurred
- env->DeleteLocalRef(jdb_name);
- env->DeleteLocalRef(jcf_name);
- return nullptr;
- }
- jlong *body = env->GetLongArrayElements(joperation_properties, nullptr);
- if (body == nullptr) {
- // exception thrown: OutOfMemoryError
- env->DeleteLocalRef(jdb_name);
- env->DeleteLocalRef(jcf_name);
- env->DeleteLocalRef(joperation_properties);
- return nullptr;
- }
- for (size_t i = 0; i < len; ++i) {
- body[i] = static_cast<jlong>(thread_status->op_properties[i]);
- }
- env->ReleaseLongArrayElements(joperation_properties, body, 0);
- jobject jcfd = env->NewObject(jclazz, mid,
- static_cast<jlong>(thread_status->thread_id),
- ThreadTypeJni::toJavaThreadType(thread_status->thread_type),
- jdb_name,
- jcf_name,
- OperationTypeJni::toJavaOperationType(thread_status->operation_type),
- static_cast<jlong>(thread_status->op_elapsed_micros),
- OperationStageJni::toJavaOperationStage(thread_status->operation_stage),
- joperation_properties,
- StateTypeJni::toJavaStateType(thread_status->state_type));
- if (env->ExceptionCheck()) {
- // exception occurred
- env->DeleteLocalRef(jdb_name);
- env->DeleteLocalRef(jcf_name);
- env->DeleteLocalRef(joperation_properties);
- return nullptr;
- }
- // cleanup
- env->DeleteLocalRef(jdb_name);
- env->DeleteLocalRef(jcf_name);
- env->DeleteLocalRef(joperation_properties);
- return jcfd;
- }
- };
- // The portal class for org.rocksdb.CompactionStyle
- class CompactionStyleJni {
- public:
- // Returns the equivalent org.rocksdb.CompactionStyle for the provided
- // C++ ROCKSDB_NAMESPACE::CompactionStyle enum
- static jbyte toJavaCompactionStyle(
- const ROCKSDB_NAMESPACE::CompactionStyle& compaction_style) {
- switch (compaction_style) {
- case ROCKSDB_NAMESPACE::CompactionStyle::kCompactionStyleLevel:
- return 0x0;
- case ROCKSDB_NAMESPACE::CompactionStyle::kCompactionStyleUniversal:
- return 0x1;
- case ROCKSDB_NAMESPACE::CompactionStyle::kCompactionStyleFIFO:
- return 0x2;
- case ROCKSDB_NAMESPACE::CompactionStyle::kCompactionStyleNone:
- return 0x3;
- default:
- return 0x7F; // undefined
- }
- }
- // Returns the equivalent C++ ROCKSDB_NAMESPACE::CompactionStyle enum for the
- // provided Java org.rocksdb.CompactionStyle
- static ROCKSDB_NAMESPACE::CompactionStyle toCppCompactionStyle(
- jbyte jcompaction_style) {
- switch (jcompaction_style) {
- case 0x0:
- return ROCKSDB_NAMESPACE::CompactionStyle::kCompactionStyleLevel;
- case 0x1:
- return ROCKSDB_NAMESPACE::CompactionStyle::kCompactionStyleUniversal;
- case 0x2:
- return ROCKSDB_NAMESPACE::CompactionStyle::kCompactionStyleFIFO;
- case 0x3:
- return ROCKSDB_NAMESPACE::CompactionStyle::kCompactionStyleNone;
- default:
- // undefined/default
- return ROCKSDB_NAMESPACE::CompactionStyle::kCompactionStyleLevel;
- }
- }
- };
- // The portal class for org.rocksdb.CompactionReason
- class CompactionReasonJni {
- public:
- // Returns the equivalent org.rocksdb.CompactionReason for the provided
- // C++ ROCKSDB_NAMESPACE::CompactionReason enum
- static jbyte toJavaCompactionReason(
- const ROCKSDB_NAMESPACE::CompactionReason& compaction_reason) {
- switch (compaction_reason) {
- case ROCKSDB_NAMESPACE::CompactionReason::kUnknown:
- return 0x0;
- case ROCKSDB_NAMESPACE::CompactionReason::kLevelL0FilesNum:
- return 0x1;
- case ROCKSDB_NAMESPACE::CompactionReason::kLevelMaxLevelSize:
- return 0x2;
- case ROCKSDB_NAMESPACE::CompactionReason::kUniversalSizeAmplification:
- return 0x3;
- case ROCKSDB_NAMESPACE::CompactionReason::kUniversalSizeRatio:
- return 0x4;
- case ROCKSDB_NAMESPACE::CompactionReason::kUniversalSortedRunNum:
- return 0x5;
- case ROCKSDB_NAMESPACE::CompactionReason::kFIFOMaxSize:
- return 0x6;
- case ROCKSDB_NAMESPACE::CompactionReason::kFIFOReduceNumFiles:
- return 0x7;
- case ROCKSDB_NAMESPACE::CompactionReason::kFIFOTtl:
- return 0x8;
- case ROCKSDB_NAMESPACE::CompactionReason::kManualCompaction:
- return 0x9;
- case ROCKSDB_NAMESPACE::CompactionReason::kFilesMarkedForCompaction:
- return 0x10;
- case ROCKSDB_NAMESPACE::CompactionReason::kBottommostFiles:
- return 0x0A;
- case ROCKSDB_NAMESPACE::CompactionReason::kTtl:
- return 0x0B;
- case ROCKSDB_NAMESPACE::CompactionReason::kFlush:
- return 0x0C;
- case ROCKSDB_NAMESPACE::CompactionReason::kExternalSstIngestion:
- return 0x0D;
- default:
- return 0x7F; // undefined
- }
- }
- // Returns the equivalent C++ ROCKSDB_NAMESPACE::CompactionReason enum for the
- // provided Java org.rocksdb.CompactionReason
- static ROCKSDB_NAMESPACE::CompactionReason toCppCompactionReason(
- jbyte jcompaction_reason) {
- switch (jcompaction_reason) {
- case 0x0:
- return ROCKSDB_NAMESPACE::CompactionReason::kUnknown;
- case 0x1:
- return ROCKSDB_NAMESPACE::CompactionReason::kLevelL0FilesNum;
- case 0x2:
- return ROCKSDB_NAMESPACE::CompactionReason::kLevelMaxLevelSize;
- case 0x3:
- return ROCKSDB_NAMESPACE::CompactionReason::kUniversalSizeAmplification;
- case 0x4:
- return ROCKSDB_NAMESPACE::CompactionReason::kUniversalSizeRatio;
- case 0x5:
- return ROCKSDB_NAMESPACE::CompactionReason::kUniversalSortedRunNum;
- case 0x6:
- return ROCKSDB_NAMESPACE::CompactionReason::kFIFOMaxSize;
- case 0x7:
- return ROCKSDB_NAMESPACE::CompactionReason::kFIFOReduceNumFiles;
- case 0x8:
- return ROCKSDB_NAMESPACE::CompactionReason::kFIFOTtl;
- case 0x9:
- return ROCKSDB_NAMESPACE::CompactionReason::kManualCompaction;
- case 0x10:
- return ROCKSDB_NAMESPACE::CompactionReason::kFilesMarkedForCompaction;
- case 0x0A:
- return ROCKSDB_NAMESPACE::CompactionReason::kBottommostFiles;
- case 0x0B:
- return ROCKSDB_NAMESPACE::CompactionReason::kTtl;
- case 0x0C:
- return ROCKSDB_NAMESPACE::CompactionReason::kFlush;
- case 0x0D:
- return ROCKSDB_NAMESPACE::CompactionReason::kExternalSstIngestion;
- default:
- // undefined/default
- return ROCKSDB_NAMESPACE::CompactionReason::kUnknown;
- }
- }
- };
- // The portal class for org.rocksdb.WalFileType
- class WalFileTypeJni {
- public:
- // Returns the equivalent org.rocksdb.WalFileType for the provided
- // C++ ROCKSDB_NAMESPACE::WalFileType enum
- static jbyte toJavaWalFileType(
- const ROCKSDB_NAMESPACE::WalFileType& wal_file_type) {
- switch (wal_file_type) {
- case ROCKSDB_NAMESPACE::WalFileType::kArchivedLogFile:
- return 0x0;
- case ROCKSDB_NAMESPACE::WalFileType::kAliveLogFile:
- return 0x1;
- default:
- return 0x7F; // undefined
- }
- }
- // Returns the equivalent C++ ROCKSDB_NAMESPACE::WalFileType enum for the
- // provided Java org.rocksdb.WalFileType
- static ROCKSDB_NAMESPACE::WalFileType toCppWalFileType(jbyte jwal_file_type) {
- switch (jwal_file_type) {
- case 0x0:
- return ROCKSDB_NAMESPACE::WalFileType::kArchivedLogFile;
- case 0x1:
- return ROCKSDB_NAMESPACE::WalFileType::kAliveLogFile;
- default:
- // undefined/default
- return ROCKSDB_NAMESPACE::WalFileType::kAliveLogFile;
- }
- }
- };
- class LogFileJni : public JavaClass {
- public:
- /**
- * Create a new Java org.rocksdb.LogFile object.
- *
- * @param env A pointer to the Java environment
- * @param log_file A Cpp log file object
- *
- * @return A reference to a Java org.rocksdb.LogFile object, or
- * nullptr if an an exception occurs
- */
- static jobject fromCppLogFile(JNIEnv* env,
- ROCKSDB_NAMESPACE::LogFile* log_file) {
- jclass jclazz = getJClass(env);
- if (jclazz == nullptr) {
- // exception occurred accessing class
- return nullptr;
- }
- jmethodID mid = env->GetMethodID(jclazz, "<init>", "(Ljava/lang/String;JBJJ)V");
- if (mid == nullptr) {
- // exception thrown: NoSuchMethodException or OutOfMemoryError
- return nullptr;
- }
- std::string path_name = log_file->PathName();
- jstring jpath_name =
- ROCKSDB_NAMESPACE::JniUtil::toJavaString(env, &path_name, true);
- if (env->ExceptionCheck()) {
- // exception occurred creating java string
- return nullptr;
- }
- jobject jlog_file = env->NewObject(
- jclazz, mid, jpath_name, static_cast<jlong>(log_file->LogNumber()),
- ROCKSDB_NAMESPACE::WalFileTypeJni::toJavaWalFileType(log_file->Type()),
- static_cast<jlong>(log_file->StartSequence()),
- static_cast<jlong>(log_file->SizeFileBytes()));
- if (env->ExceptionCheck()) {
- env->DeleteLocalRef(jpath_name);
- return nullptr;
- }
- // cleanup
- env->DeleteLocalRef(jpath_name);
- return jlog_file;
- }
- static jclass getJClass(JNIEnv* env) {
- return JavaClass::getJClass(env, "org/rocksdb/LogFile");
- }
- };
- class LiveFileMetaDataJni : public JavaClass {
- public:
- /**
- * Create a new Java org.rocksdb.LiveFileMetaData object.
- *
- * @param env A pointer to the Java environment
- * @param live_file_meta_data A Cpp live file meta data object
- *
- * @return A reference to a Java org.rocksdb.LiveFileMetaData object, or
- * nullptr if an an exception occurs
- */
- static jobject fromCppLiveFileMetaData(
- JNIEnv* env, ROCKSDB_NAMESPACE::LiveFileMetaData* live_file_meta_data) {
- jclass jclazz = getJClass(env);
- if (jclazz == nullptr) {
- // exception occurred accessing class
- return nullptr;
- }
- jmethodID mid = env->GetMethodID(jclazz, "<init>", "([BILjava/lang/String;Ljava/lang/String;JJJ[B[BJZJJ)V");
- if (mid == nullptr) {
- // exception thrown: NoSuchMethodException or OutOfMemoryError
- return nullptr;
- }
- jbyteArray jcolumn_family_name = ROCKSDB_NAMESPACE::JniUtil::copyBytes(
- env, live_file_meta_data->column_family_name);
- if (jcolumn_family_name == nullptr) {
- // exception occurred creating java byte array
- return nullptr;
- }
- jstring jfile_name = ROCKSDB_NAMESPACE::JniUtil::toJavaString(
- env, &live_file_meta_data->name, true);
- if (env->ExceptionCheck()) {
- // exception occurred creating java string
- env->DeleteLocalRef(jcolumn_family_name);
- return nullptr;
- }
- jstring jpath = ROCKSDB_NAMESPACE::JniUtil::toJavaString(
- env, &live_file_meta_data->db_path, true);
- if (env->ExceptionCheck()) {
- // exception occurred creating java string
- env->DeleteLocalRef(jcolumn_family_name);
- env->DeleteLocalRef(jfile_name);
- return nullptr;
- }
- jbyteArray jsmallest_key = ROCKSDB_NAMESPACE::JniUtil::copyBytes(
- env, live_file_meta_data->smallestkey);
- if (jsmallest_key == nullptr) {
- // exception occurred creating java byte array
- env->DeleteLocalRef(jcolumn_family_name);
- env->DeleteLocalRef(jfile_name);
- env->DeleteLocalRef(jpath);
- return nullptr;
- }
- jbyteArray jlargest_key = ROCKSDB_NAMESPACE::JniUtil::copyBytes(
- env, live_file_meta_data->largestkey);
- if (jlargest_key == nullptr) {
- // exception occurred creating java byte array
- env->DeleteLocalRef(jcolumn_family_name);
- env->DeleteLocalRef(jfile_name);
- env->DeleteLocalRef(jpath);
- env->DeleteLocalRef(jsmallest_key);
- return nullptr;
- }
- jobject jlive_file_meta_data = env->NewObject(jclazz, mid,
- jcolumn_family_name,
- static_cast<jint>(live_file_meta_data->level),
- jfile_name,
- jpath,
- static_cast<jlong>(live_file_meta_data->size),
- static_cast<jlong>(live_file_meta_data->smallest_seqno),
- static_cast<jlong>(live_file_meta_data->largest_seqno),
- jsmallest_key,
- jlargest_key,
- static_cast<jlong>(live_file_meta_data->num_reads_sampled),
- static_cast<jboolean>(live_file_meta_data->being_compacted),
- static_cast<jlong>(live_file_meta_data->num_entries),
- static_cast<jlong>(live_file_meta_data->num_deletions)
- );
- if (env->ExceptionCheck()) {
- env->DeleteLocalRef(jcolumn_family_name);
- env->DeleteLocalRef(jfile_name);
- env->DeleteLocalRef(jpath);
- env->DeleteLocalRef(jsmallest_key);
- env->DeleteLocalRef(jlargest_key);
- return nullptr;
- }
- // cleanup
- env->DeleteLocalRef(jcolumn_family_name);
- env->DeleteLocalRef(jfile_name);
- env->DeleteLocalRef(jpath);
- env->DeleteLocalRef(jsmallest_key);
- env->DeleteLocalRef(jlargest_key);
- return jlive_file_meta_data;
- }
- static jclass getJClass(JNIEnv* env) {
- return JavaClass::getJClass(env, "org/rocksdb/LiveFileMetaData");
- }
- };
- class SstFileMetaDataJni : public JavaClass {
- public:
- /**
- * Create a new Java org.rocksdb.SstFileMetaData object.
- *
- * @param env A pointer to the Java environment
- * @param sst_file_meta_data A Cpp sst file meta data object
- *
- * @return A reference to a Java org.rocksdb.SstFileMetaData object, or
- * nullptr if an an exception occurs
- */
- static jobject fromCppSstFileMetaData(
- JNIEnv* env,
- const ROCKSDB_NAMESPACE::SstFileMetaData* sst_file_meta_data) {
- jclass jclazz = getJClass(env);
- if (jclazz == nullptr) {
- // exception occurred accessing class
- return nullptr;
- }
- jmethodID mid = env->GetMethodID(jclazz, "<init>", "(Ljava/lang/String;Ljava/lang/String;JJJ[B[BJZJJ)V");
- if (mid == nullptr) {
- // exception thrown: NoSuchMethodException or OutOfMemoryError
- return nullptr;
- }
- jstring jfile_name = ROCKSDB_NAMESPACE::JniUtil::toJavaString(
- env, &sst_file_meta_data->name, true);
- if (jfile_name == nullptr) {
- // exception occurred creating java byte array
- return nullptr;
- }
- jstring jpath = ROCKSDB_NAMESPACE::JniUtil::toJavaString(
- env, &sst_file_meta_data->db_path, true);
- if (jpath == nullptr) {
- // exception occurred creating java byte array
- env->DeleteLocalRef(jfile_name);
- return nullptr;
- }
- jbyteArray jsmallest_key = ROCKSDB_NAMESPACE::JniUtil::copyBytes(
- env, sst_file_meta_data->smallestkey);
- if (jsmallest_key == nullptr) {
- // exception occurred creating java byte array
- env->DeleteLocalRef(jfile_name);
- env->DeleteLocalRef(jpath);
- return nullptr;
- }
- jbyteArray jlargest_key = ROCKSDB_NAMESPACE::JniUtil::copyBytes(
- env, sst_file_meta_data->largestkey);
- if (jlargest_key == nullptr) {
- // exception occurred creating java byte array
- env->DeleteLocalRef(jfile_name);
- env->DeleteLocalRef(jpath);
- env->DeleteLocalRef(jsmallest_key);
- return nullptr;
- }
- jobject jsst_file_meta_data = env->NewObject(jclazz, mid,
- jfile_name,
- jpath,
- static_cast<jlong>(sst_file_meta_data->size),
- static_cast<jint>(sst_file_meta_data->smallest_seqno),
- static_cast<jlong>(sst_file_meta_data->largest_seqno),
- jsmallest_key,
- jlargest_key,
- static_cast<jlong>(sst_file_meta_data->num_reads_sampled),
- static_cast<jboolean>(sst_file_meta_data->being_compacted),
- static_cast<jlong>(sst_file_meta_data->num_entries),
- static_cast<jlong>(sst_file_meta_data->num_deletions)
- );
- if (env->ExceptionCheck()) {
- env->DeleteLocalRef(jfile_name);
- env->DeleteLocalRef(jpath);
- env->DeleteLocalRef(jsmallest_key);
- env->DeleteLocalRef(jlargest_key);
- return nullptr;
- }
- // cleanup
- env->DeleteLocalRef(jfile_name);
- env->DeleteLocalRef(jpath);
- env->DeleteLocalRef(jsmallest_key);
- env->DeleteLocalRef(jlargest_key);
- return jsst_file_meta_data;
- }
- static jclass getJClass(JNIEnv* env) {
- return JavaClass::getJClass(env, "org/rocksdb/SstFileMetaData");
- }
- };
- class LevelMetaDataJni : public JavaClass {
- public:
- /**
- * Create a new Java org.rocksdb.LevelMetaData object.
- *
- * @param env A pointer to the Java environment
- * @param level_meta_data A Cpp level meta data object
- *
- * @return A reference to a Java org.rocksdb.LevelMetaData object, or
- * nullptr if an an exception occurs
- */
- static jobject fromCppLevelMetaData(
- JNIEnv* env, const ROCKSDB_NAMESPACE::LevelMetaData* level_meta_data) {
- jclass jclazz = getJClass(env);
- if (jclazz == nullptr) {
- // exception occurred accessing class
- return nullptr;
- }
- jmethodID mid = env->GetMethodID(jclazz, "<init>", "(IJ[Lorg/rocksdb/SstFileMetaData;)V");
- if (mid == nullptr) {
- // exception thrown: NoSuchMethodException or OutOfMemoryError
- return nullptr;
- }
- const jsize jlen =
- static_cast<jsize>(level_meta_data->files.size());
- jobjectArray jfiles = env->NewObjectArray(jlen, SstFileMetaDataJni::getJClass(env), nullptr);
- if (jfiles == nullptr) {
- // exception thrown: OutOfMemoryError
- return nullptr;
- }
- jsize i = 0;
- for (auto it = level_meta_data->files.begin();
- it != level_meta_data->files.end(); ++it) {
- jobject jfile = SstFileMetaDataJni::fromCppSstFileMetaData(env, &(*it));
- if (jfile == nullptr) {
- // exception occurred
- env->DeleteLocalRef(jfiles);
- return nullptr;
- }
- env->SetObjectArrayElement(jfiles, i++, jfile);
- }
- jobject jlevel_meta_data = env->NewObject(jclazz, mid,
- static_cast<jint>(level_meta_data->level),
- static_cast<jlong>(level_meta_data->size),
- jfiles
- );
- if (env->ExceptionCheck()) {
- env->DeleteLocalRef(jfiles);
- return nullptr;
- }
- // cleanup
- env->DeleteLocalRef(jfiles);
- return jlevel_meta_data;
- }
- static jclass getJClass(JNIEnv* env) {
- return JavaClass::getJClass(env, "org/rocksdb/LevelMetaData");
- }
- };
- class ColumnFamilyMetaDataJni : public JavaClass {
- public:
- /**
- * Create a new Java org.rocksdb.ColumnFamilyMetaData object.
- *
- * @param env A pointer to the Java environment
- * @param column_famly_meta_data A Cpp live file meta data object
- *
- * @return A reference to a Java org.rocksdb.ColumnFamilyMetaData object, or
- * nullptr if an an exception occurs
- */
- static jobject fromCppColumnFamilyMetaData(
- JNIEnv* env,
- const ROCKSDB_NAMESPACE::ColumnFamilyMetaData* column_famly_meta_data) {
- jclass jclazz = getJClass(env);
- if (jclazz == nullptr) {
- // exception occurred accessing class
- return nullptr;
- }
- jmethodID mid = env->GetMethodID(jclazz, "<init>", "(JJ[B[Lorg/rocksdb/LevelMetaData;)V");
- if (mid == nullptr) {
- // exception thrown: NoSuchMethodException or OutOfMemoryError
- return nullptr;
- }
- jbyteArray jname = ROCKSDB_NAMESPACE::JniUtil::copyBytes(
- env, column_famly_meta_data->name);
- if (jname == nullptr) {
- // exception occurred creating java byte array
- return nullptr;
- }
- const jsize jlen =
- static_cast<jsize>(column_famly_meta_data->levels.size());
- jobjectArray jlevels = env->NewObjectArray(jlen, LevelMetaDataJni::getJClass(env), nullptr);
- if(jlevels == nullptr) {
- // exception thrown: OutOfMemoryError
- env->DeleteLocalRef(jname);
- return nullptr;
- }
- jsize i = 0;
- for (auto it = column_famly_meta_data->levels.begin();
- it != column_famly_meta_data->levels.end(); ++it) {
- jobject jlevel = LevelMetaDataJni::fromCppLevelMetaData(env, &(*it));
- if (jlevel == nullptr) {
- // exception occurred
- env->DeleteLocalRef(jname);
- env->DeleteLocalRef(jlevels);
- return nullptr;
- }
- env->SetObjectArrayElement(jlevels, i++, jlevel);
- }
- jobject jcolumn_family_meta_data = env->NewObject(jclazz, mid,
- static_cast<jlong>(column_famly_meta_data->size),
- static_cast<jlong>(column_famly_meta_data->file_count),
- jname,
- jlevels
- );
- if (env->ExceptionCheck()) {
- env->DeleteLocalRef(jname);
- env->DeleteLocalRef(jlevels);
- return nullptr;
- }
- // cleanup
- env->DeleteLocalRef(jname);
- env->DeleteLocalRef(jlevels);
- return jcolumn_family_meta_data;
- }
- static jclass getJClass(JNIEnv* env) {
- return JavaClass::getJClass(env, "org/rocksdb/ColumnFamilyMetaData");
- }
- };
- // The portal class for org.rocksdb.AbstractTraceWriter
- class AbstractTraceWriterJni
- : public RocksDBNativeClass<
- const ROCKSDB_NAMESPACE::TraceWriterJniCallback*,
- AbstractTraceWriterJni> {
- public:
- /**
- * Get the Java Class org.rocksdb.AbstractTraceWriter
- *
- * @param env A pointer to the Java environment
- *
- * @return The Java Class or nullptr if one of the
- * ClassFormatError, ClassCircularityError, NoClassDefFoundError,
- * OutOfMemoryError or ExceptionInInitializerError exceptions is thrown
- */
- static jclass getJClass(JNIEnv* env) {
- return RocksDBNativeClass::getJClass(env,
- "org/rocksdb/AbstractTraceWriter");
- }
- /**
- * Get the Java Method: AbstractTraceWriter#write
- *
- * @param env A pointer to the Java environment
- *
- * @return The Java Method ID or nullptr if the class or method id could not
- * be retieved
- */
- static jmethodID getWriteProxyMethodId(JNIEnv* env) {
- jclass jclazz = getJClass(env);
- if(jclazz == nullptr) {
- // exception occurred accessing class
- return nullptr;
- }
- static jmethodID mid = env->GetMethodID(
- jclazz, "writeProxy", "(J)S");
- assert(mid != nullptr);
- return mid;
- }
- /**
- * Get the Java Method: AbstractTraceWriter#closeWriter
- *
- * @param env A pointer to the Java environment
- *
- * @return The Java Method ID or nullptr if the class or method id could not
- * be retieved
- */
- static jmethodID getCloseWriterProxyMethodId(JNIEnv* env) {
- jclass jclazz = getJClass(env);
- if(jclazz == nullptr) {
- // exception occurred accessing class
- return nullptr;
- }
- static jmethodID mid = env->GetMethodID(
- jclazz, "closeWriterProxy", "()S");
- assert(mid != nullptr);
- return mid;
- }
- /**
- * Get the Java Method: AbstractTraceWriter#getFileSize
- *
- * @param env A pointer to the Java environment
- *
- * @return The Java Method ID or nullptr if the class or method id could not
- * be retieved
- */
- static jmethodID getGetFileSizeMethodId(JNIEnv* env) {
- jclass jclazz = getJClass(env);
- if(jclazz == nullptr) {
- // exception occurred accessing class
- return nullptr;
- }
- static jmethodID mid = env->GetMethodID(
- jclazz, "getFileSize", "()J");
- assert(mid != nullptr);
- return mid;
- }
- };
- // The portal class for org.rocksdb.AbstractWalFilter
- class AbstractWalFilterJni
- : public RocksDBNativeClass<const ROCKSDB_NAMESPACE::WalFilterJniCallback*,
- AbstractWalFilterJni> {
- public:
- /**
- * Get the Java Class org.rocksdb.AbstractWalFilter
- *
- * @param env A pointer to the Java environment
- *
- * @return The Java Class or nullptr if one of the
- * ClassFormatError, ClassCircularityError, NoClassDefFoundError,
- * OutOfMemoryError or ExceptionInInitializerError exceptions is thrown
- */
- static jclass getJClass(JNIEnv* env) {
- return RocksDBNativeClass::getJClass(env,
- "org/rocksdb/AbstractWalFilter");
- }
- /**
- * Get the Java Method: AbstractWalFilter#columnFamilyLogNumberMap
- *
- * @param env A pointer to the Java environment
- *
- * @return The Java Method ID or nullptr if the class or method id could not
- * be retieved
- */
- static jmethodID getColumnFamilyLogNumberMapMethodId(JNIEnv* env) {
- jclass jclazz = getJClass(env);
- if(jclazz == nullptr) {
- // exception occurred accessing class
- return nullptr;
- }
- static jmethodID mid = env->GetMethodID(
- jclazz, "columnFamilyLogNumberMap",
- "(Ljava/util/Map;Ljava/util/Map;)V");
- assert(mid != nullptr);
- return mid;
- }
- /**
- * Get the Java Method: AbstractTraceWriter#logRecordFoundProxy
- *
- * @param env A pointer to the Java environment
- *
- * @return The Java Method ID or nullptr if the class or method id could not
- * be retieved
- */
- static jmethodID getLogRecordFoundProxyMethodId(JNIEnv* env) {
- jclass jclazz = getJClass(env);
- if(jclazz == nullptr) {
- // exception occurred accessing class
- return nullptr;
- }
- static jmethodID mid = env->GetMethodID(
- jclazz, "logRecordFoundProxy", "(JLjava/lang/String;JJ)S");
- assert(mid != nullptr);
- return mid;
- }
- /**
- * Get the Java Method: AbstractTraceWriter#name
- *
- * @param env A pointer to the Java environment
- *
- * @return The Java Method ID or nullptr if the class or method id could not
- * be retieved
- */
- static jmethodID getNameMethodId(JNIEnv* env) {
- jclass jclazz = getJClass(env);
- if(jclazz == nullptr) {
- // exception occurred accessing class
- return nullptr;
- }
- static jmethodID mid = env->GetMethodID(
- jclazz, "name", "()Ljava/lang/String;");
- assert(mid != nullptr);
- return mid;
- }
- };
- // The portal class for org.rocksdb.WalProcessingOption
- class WalProcessingOptionJni {
- public:
- // Returns the equivalent org.rocksdb.WalProcessingOption for the provided
- // C++ ROCKSDB_NAMESPACE::WalFilter::WalProcessingOption enum
- static jbyte toJavaWalProcessingOption(
- const ROCKSDB_NAMESPACE::WalFilter::WalProcessingOption&
- wal_processing_option) {
- switch (wal_processing_option) {
- case ROCKSDB_NAMESPACE::WalFilter::WalProcessingOption::
- kContinueProcessing:
- return 0x0;
- case ROCKSDB_NAMESPACE::WalFilter::WalProcessingOption::
- kIgnoreCurrentRecord:
- return 0x1;
- case ROCKSDB_NAMESPACE::WalFilter::WalProcessingOption::kStopReplay:
- return 0x2;
- case ROCKSDB_NAMESPACE::WalFilter::WalProcessingOption::kCorruptedRecord:
- return 0x3;
- default:
- return 0x7F; // undefined
- }
- }
- // Returns the equivalent C++
- // ROCKSDB_NAMESPACE::WalFilter::WalProcessingOption enum for the provided
- // Java org.rocksdb.WalProcessingOption
- static ROCKSDB_NAMESPACE::WalFilter::WalProcessingOption
- toCppWalProcessingOption(jbyte jwal_processing_option) {
- switch (jwal_processing_option) {
- case 0x0:
- return ROCKSDB_NAMESPACE::WalFilter::WalProcessingOption::
- kContinueProcessing;
- case 0x1:
- return ROCKSDB_NAMESPACE::WalFilter::WalProcessingOption::
- kIgnoreCurrentRecord;
- case 0x2:
- return ROCKSDB_NAMESPACE::WalFilter::WalProcessingOption::kStopReplay;
- case 0x3:
- return ROCKSDB_NAMESPACE::WalFilter::WalProcessingOption::
- kCorruptedRecord;
- default:
- // undefined/default
- return ROCKSDB_NAMESPACE::WalFilter::WalProcessingOption::
- kCorruptedRecord;
- }
- }
- };
- // The portal class for org.rocksdb.ReusedSynchronisationType
- class ReusedSynchronisationTypeJni {
- public:
- // Returns the equivalent org.rocksdb.ReusedSynchronisationType for the
- // provided C++ ROCKSDB_NAMESPACE::ReusedSynchronisationType enum
- static jbyte toJavaReusedSynchronisationType(
- const ROCKSDB_NAMESPACE::ReusedSynchronisationType&
- reused_synchronisation_type) {
- switch(reused_synchronisation_type) {
- case ROCKSDB_NAMESPACE::ReusedSynchronisationType::MUTEX:
- return 0x0;
- case ROCKSDB_NAMESPACE::ReusedSynchronisationType::ADAPTIVE_MUTEX:
- return 0x1;
- case ROCKSDB_NAMESPACE::ReusedSynchronisationType::THREAD_LOCAL:
- return 0x2;
- default:
- return 0x7F; // undefined
- }
- }
- // Returns the equivalent C++ ROCKSDB_NAMESPACE::ReusedSynchronisationType
- // enum for the provided Java org.rocksdb.ReusedSynchronisationType
- static ROCKSDB_NAMESPACE::ReusedSynchronisationType
- toCppReusedSynchronisationType(jbyte reused_synchronisation_type) {
- switch(reused_synchronisation_type) {
- case 0x0:
- return ROCKSDB_NAMESPACE::ReusedSynchronisationType::MUTEX;
- case 0x1:
- return ROCKSDB_NAMESPACE::ReusedSynchronisationType::ADAPTIVE_MUTEX;
- case 0x2:
- return ROCKSDB_NAMESPACE::ReusedSynchronisationType::THREAD_LOCAL;
- default:
- // undefined/default
- return ROCKSDB_NAMESPACE::ReusedSynchronisationType::ADAPTIVE_MUTEX;
- }
- }
- };
- } // namespace ROCKSDB_NAMESPACE
- #endif // JAVA_ROCKSJNI_PORTAL_H_
|